试图从php:最新映像(没有apache或nginx)连接到mysql 8(mysql:最新),我得到了这个恼人的错误:
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我已经在堆栈溢出上寻找了+20的解决方案,但是没有一个能够解决我的问题。使用mysql工作台或DataGrid可以使用以下凭据进行连接,而不存在任何问题:
服务器:本地主机用户:根传递: 12345678
但是,我在php映像上使用的任何配置都不能使它们彼此连接。
我的船坞-撰写文件:
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:我用的是mac的码头
经过5个小时的研究,我真的不知道还能做些什么,而且我也不是码头专家,我希望能为我指明修复的方向。
谢谢!
发布于 2019-01-28 12:41:16
找到了解决办法。结果是,在启动php脚本之前,我需要等待mysql服务可用。因此,我使用了等-它-它解决方案,并在docker上这样做:
command: >
bash -c "chmod +x /docker/./wait-for-it.sh
&& /docker/./wait-for-it.sh database:3306 -- echo 'database is up'
&& php phpscript.php"谢谢你的帮助
发布于 2019-01-28 02:09:05
在您的例子中,您不能通过localhost或127.0.0.1连接mysql。如果你这样联系的话。它调用localhost inside php容器。但是您的php容器中没有mysql安装。
您必须通过容器名来控制name。或者docker inspect您mysql容器并获得容器IP。例如,与您的码头-撰写
database:
container_name: mysql现在您的mysql数据库主机是mysql -容器名,而不是localhost。
https://stackoverflow.com/questions/54393117
复制相似问题