mysqli::real_connect():php_network_getaddresses:getaddrinfo失败:名称或服务未知

问题描述 投票:0回答:1

我正在尝试使用 phpstorm 和 xdebug 以及 Docker 来调试我的 codeigniter 1.0.0 应用程序代码。 Phpmyadmin 和 Adminer 容器都能够连接到另一个容器上的 mysql,但 codeigniter 容器不能。我已经尝试过针对 SE 上类似问题提供的所有解决方案,但陷入了死胡同。如果有人能指出可能出现的问题,我将不胜感激。

这是 docker compose 文件:

version: '3'

services:
  # Database
  mysql:
    container_name: mysql
    image: mysql:5.7
    command: --sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'
    volumes:
      - db_data:/var/lib/mysql
      - ./mysql-files:/var/lib/mysql-files
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: xxxxxxxxxxxx
      MYSQL_DATABASE: bitnami_blr
      MYSQL_TCP_PORT: 3306
    ports:
      - 3306:3306
    expose:
      - 3306
    networks:
      - blrappci
  # phpmyadmin
  phpmyadmin:
    container_name: phpmyadmin
    depends_on:
      - mysql
    image: phpmyadmin/phpmyadmin
    restart: always
    ports:
      - '8080:80'
    environment:
      PMA_HOST: mysql
      MYSQL_ROOT_PASSWORD: xxxxxxxxxxxx
      UPLOAD_LIMIT: 314572800
    networks:
      - blrappci
  # adminer
  adminer:
    container_name: adminer
    depends_on:
      - mysql
    image: adminer:latest
    restart: always
    ports:
      - '8088:8080'
    environment:
      ADMINER_DEFAULT_SERVER: mysql
    networks:
      - blrappci
  # php-cli /usr/local/bin/php
  app:
    container_name: app
    build:
      context: .
      dockerfile: Dockerfile
    depends_on:
      - mysql
    restart: always
    tty: true
    environment:
      XDEBUG_CONFIG: remote_host=host.docker.internal
    volumes:
        - ./apps:/opt/bitnami/apps
        - ./php-development.ini:/usr/local/etc/php/conf.d/php-development.ini
    networks:
      - blrappci
networks:
  blrappci:
volumes:
  db_data:

我的codeigniter database.php文件:

$active_group = 'default';
$query_builder = TRUE;

$db['default'] = array(
    'dsn'   => '',
    'hostname' => 'mysql',
    'username' => 'root',
    'password' => 'xxxxxxxxxxxx',
    'database' => 'bitnami_blr',
    'dbdriver' => 'mysqli',
    'dbprefix' => '',
    'pconnect' => FALSE,
    'db_debug' => (ENVIRONMENT !== 'production'),
    'cache_on' => FALSE,
    'cachedir' => '',
    'char_set' => 'utf8',
    'dbcollat' => 'utf8_unicode_ci',
    'swap_pre' => '',
    'encrypt' => FALSE,
    'compress' => FALSE,
    'stricton' => FALSE,
    'failover' => array(),
    'save_queries' => TRUE
);

我收到以下错误:

Severity:    Warning
Message:     mysqli::real_connect(): php_network_getaddresses: getaddrinfo failed: Name or service not known
Filename:    /opt/bitnami/apps/blrappci/system/database/drivers/mysqli/mysqli_driver.php
Line Number: 203

感谢所有帮助。

php mysql docker codeigniter docker-compose
1个回答
0
投票

确保 mysql 的容器正在运行,如果它正在运行,您可以使用以下命令进入应用程序容器:

docker exec -it app sh

然后尝试使用 ping 命令或curl 命令访问 mysql 容器

ping mysql
curl mysql:3306 -vvv

如果您看到它正在获取容器的IP,则意味着它连接良好并且您的网络也很好。

如果不是,请检查 docker-compose 上的网络策略。

© www.soinside.com 2019 - 2024. All rights reserved.