Php 通过PDO在docker容器上连接Mysql时出现问题,但命令行可以工作
我的问题摘要如下: 我的docker compose的什么特征是与PDO冲突,它阻止主机->mysql docker通过PDO,但允许主机->mysql docker通过所有其他工具Php 通过PDO在docker容器上连接Mysql时出现问题,但命令行可以工作,php,mysql,docker,pdo,Php,Mysql,Docker,Pdo,我的问题摘要如下: 我的docker compose的什么特征是与PDO冲突,它阻止主机->mysql docker通过PDO,但允许主机->mysql docker通过所有其他工具 我的应用程序的配置文件: database: host: mysql port: 3306 name: <name> username: <username> password: <pass> outsideContainerConnections:
我的应用程序的配置文件:
database:
host: mysql
port: 3306
name: <name>
username: <username>
password: <pass>
outsideContainerConnections:
host: 127.0.0.1
port: 3307
感谢阅读。如果没有,请尝试客户端的“mysql--port=3307-H127.0.0.1-u-p”我已经解决了这个问题–这很简单,但希望是一个很好的教训 在一个例子中,PHP文件是由cron运行的,因此它是在docker容器之外的本地运行的。我的文件中有一个小语法或其他错误,所以cron遇到了一些问题 为了调试这种情况,我在我的web浏览器中打开了这个文件——这就是关键。我在web浏览器中看到的连接错误与cron遇到的问题不同,因为docker容器正在为该页面提供服务。因此,连接细节必须有所不同。同一设置无法从主机和邻居容器同时运行 我学到的是这一点;这似乎是一个非常令人兴奋的技术问题,需要大量的手工阅读和研究,这可能是一个简单的错误假设。有时候,回到绘图板上,从一开始就勾勒出形势的轮廓是值得的
在某种程度上,我问这个问题就是这么做的,所以谢谢你给我这样做的空间。恐怕我不明白你的意思。我可以从命令行连接,但无法通过PDO连接。您是有意将-u参数留空还是暗示用户名在那里?同样,我可以从命令行连接,没有问题。尝试使用
host=0.0.0.0
@Dmitry,我刚刚尝试过,有趣的是,通过命令行的mysql也可以使用0.0.0.0进行连接。不幸的是,PDO给出了相同的“连接被拒绝”异常。这个问题似乎是PDO独有的,我还不能解释为什么。您是否也在另一个容器中运行PHP应用程序?然后请共享相关的Dockerfile
部分。我确实可以从另一个容器运行php应用程序。但是,对于这个问题,我正在使用PHP从主机进行工作。你愿意我把整个docker的文章都发出去吗?
mysql --port=3307 -h 127.0.0.1 -u <username> -p
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;
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