【发布时间】:2020-01-18 03:18:41
【问题描述】:
我的问题的简要总结: 我的 docker-compose 的什么特点是与 PDO 发生冲突,从而阻止 Host -> mysql-docker via PDO,但允许 Host -> mysql-docker 来自 所有 其他工具?
我的应用的配置文件:
database:
host: mysql
port: 3306
name: <name>
username: <username>
password: <pass>
outsideContainerConnections:
host: 127.0.0.1
port: 3307
容器内一切正常,我可以在命令行上使用 PHPStorm 或 Mysql 从主机访问数据库。
如果我从主机运行此命令,它会连接
mysql --port=3307 -h 127.0.0.1 -u <username> -p
但是,如果我尝试使用 PDO 从主机上的 php 连接,则会失败并显示
PDOException: SQLSTATE[HY000] [2002] 连接被拒绝
我尝试过的 PDO DSN:
mysql:host=127.0.0.1:3307;port=;dbname=<name>;&charset=utf8;
or
mysql:host=127.0.0.1;port=3307;dbname=<name>;&charset=utf8;
or
mysql:host=127.0.0.1:3307;dbname=<name>;&charset=utf8;
我已经阅读了有关使用 localhost 与 127.0.0.1 强制 TCP 的信息,我在这里这样做。
这也是我的 docker-composer 的相关部分。同样,使用主机中的命令行或其他工具可以正常工作,似乎只有 PDO 有问题。值得一提的是,docker-compose 网络中另一个容器上的 PDO 正在运行。
mysql:
build: './mysql_docker'
command: --lower_case_table_names=0
ports:
- '3307:3306'
volumes:
- ./volumes/mysql:/var/lib/mysql
- ./volumes/my.cnf:/etc/my.cnf
networks:
- app-tier
感谢您的阅读。
【问题讨论】:
-
尝试使用
host=0.0.0.0 -
@Dmitry,我刚刚尝试过,有趣的是,通过命令行的 mysql 也能够使用 0.0.0.0 进行连接。不幸的是,PDO 给出了相同的“连接被拒绝”异常。这个问题似乎是 PDO 独有的,我还无法解释原因。
-
您是否也在另一个容器中运行您的 PHP 应用程序?那么请分享相关
Dockerfile部分 -
我确实从另一个容器运行了一个 php 应用程序。但是,对于这个问题,我在 PHP 中的主机上工作。你愿意我发布整个 docker-compose 吗?