[英]Can't connect to between mysql container and php in docker
尝试从 php:latest 图像(没有 apache 或 nginx)连接到 mysql 8 (mysql:latest),我收到了这个烦人的错误:
Fatal error: Uncaught PDOException: SQLSTATE[HY000] [2002] Connection refused in /src/conn.php:5
Stack trace:
#0 /src/conn.php(5): PDO->__construct('mysql:host=data...', 'root', '12345678')
#1 {main}
thrown in /src/conn.php on line 5
我已经在 stackoverflow 上寻找了 +20 个解决方案,但没有一个能够解决我的问题。 我可以使用以下凭据使用 mysql workbench 或 DataGrid 毫无问题地进行连接:
服务器:本地主机用户:root 通行证:12345678
但是我在 php 图像上使用的任何配置都无法使它们相互连接。
我的 docker-compose 文件:
version: '3'
services:
composer:
container_name: composer
networks:
- backend
image: composer
volumes:
- .:/app
command: install
database:
container_name: mysql
networks:
- backend
image: mysql:latest
volumes:
- ./database/mysqldata:/var/lib/mysql
command: --default-authentication-plugin=mysql_native_password
environment:
MYSQL_ROOT_PASSWORD: 12345678
MYSQL_DATABASE: testdb
ports:
- "3306:3306"
php:
build:
context: .
container_name: php
networks:
- backend
image: php:apache
links:
- database
env_file:
- .env
volumes:
- .:/
command:
php /src/conn.php
depends_on:
- composer
- database
networks:
backend:
我的 conn.php:
<?php
$db = new PDO('mysql:host=database;dbname=testdb', 'root', '12345678');
到目前为止,我为尝试解决问题所做的工作:
PS:我正在使用 docker for mac
经过 5 个小时的研究,我真的不知道还能做什么,而且由于我不是 docker 专家,如果您能帮助我指明修复的方向,我将不胜感激。
谢谢!
在您的情况下,您无法通过localhost
或127.0.0.1
连接到 mysql。 如果你这样连接。 它调用 php 容器inside
localhost。 但是您的 php 容器中没有 mysql 安装。
您必须通过容器名称连接。 或者docker inspect
您的 mysql 容器并获取容器IP
。 例如与您的 docker-compose
database:
container_name: mysql
现在你的 mysql 数据库主机是mysql
- 容器名称而不是localhost
能够找到解决方案。 原来我需要等待 mysql 服务可用,然后才能启动 php 脚本。 所以我使用了等待解决方案并在 docker-compose 上做到了这一点:
command: >
bash -c "chmod +x /docker/./wait-for-it.sh
&& /docker/./wait-for-it.sh database:3306 -- echo 'database is up'
&& php phpscript.php"
感谢您的帮助
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.