Php 通过PDO在docker容器上连接Mysql时出现问题,但命令行可以工作

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:

我的问题摘要如下: 我的docker compose的什么特征是与PDO冲突,它阻止主机->mysql docker通过PDO,但允许主机->mysql docker通过所有其他工具


我的应用程序的配置文件:

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