我的问题的简要总结:我的 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 容器提供的。因此,连接细节必须不同。相同的设置不能同时从主机和邻居容器工作。
我学到的是这个;似乎是一个非常令人头疼的技术问题,需要大量的人工阅读和研究,这可能是一个简单的错误假设。有时值得回到绘图板上,从头开始勾勒出情况的轮廓。
在某种程度上,这就是我提出这个问题时所做的,所以感谢您提供空间。
- 2 回答
- 0 关注
- 169 浏览
添加回答
举报
0/150
提交
取消