我正在尝试使用 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
感谢所有帮助。
确保 mysql 的容器正在运行,如果它正在运行,您可以使用以下命令进入应用程序容器:
docker exec -it app sh
然后尝试使用 ping 命令或curl 命令访问 mysql 容器
ping mysql
curl mysql:3306 -vvv
如果您看到它正在获取容器的IP,则意味着它连接良好并且您的网络也很好。
如果不是,请检查 docker-compose 上的网络策略。