为了账号安全,请及时绑定邮箱和手机立即绑定

通过 PDO 在 docker 容器上连接到 Mysql 时出现问题,但命令行有效

通过 PDO 在 docker 容器上连接到 Mysql 时出现问题,但命令行有效

PHP
慕尼黑的夜晚无繁华 2022-07-22 19:22:01
我的问题的简要总结:我的 docker-compose 的什么特征与 PDO 发生冲突,通过 PDO 阻止 Host -> mysql-docker,但允许来自所有其他工具的 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;    ormysql:host=127.0.0.1;port=3307;dbname=<name>;&charset=utf8;    ormysql: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感谢您的阅读。
查看完整描述

2 回答

?
富国沪深

TA贡献1790条经验 获得超9个赞

我已经解决了——它很简单,但希望是一个很好的教训。

在一种情况下,PHP 文件由 cron 运行,因此它在本地运行,在 docker 容器之外。我的文件中有一个小语法或其他错误,因此 cron 遇到了一些问题。

为了调试这种情况,我在我的网络浏览器中打开了文件——这就是关键。我在 Web 浏览器中看到的连接错误与 cron 遇到的问题不同,因为该页面是由 docker 容器提供的。因此,连接细节必须不同。相同的设置不能同时从主机和邻居容器工作。

我学到的是这个;似乎是一个非常令人头疼的技术问题,需要大量的人工阅读和研究,这可能是一个简单的错误假设。有时值得回到绘图板上,从头开始勾勒出情况的轮廓。

在某种程度上,这就是我提出这个问题时所做的,所以感谢您提供空间。


查看完整回答
反对 回复 2022-07-22
?
慕后森

TA贡献1802条经验 获得超5个赞

如果没有,请从客户端尝试“mysql --port=3307 -h 127.0.0.1 -u -p”



查看完整回答
反对 回复 2022-07-22
  • 2 回答
  • 0 关注
  • 169 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信