【问题标题】:Problems connecting to Mysql on a docker container via PDO, but command line works通过 PDO 在 docker 容器上连接到 Mysql 时出现问题,但命令行有效
【发布时间】: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 吗?

标签: php mysql docker pdo


【解决方案1】:

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

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

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

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

我问这个问题的方式就是这样,所以感谢您提供空间。

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 恐怕我不明白你的意思。我可以从命令行连接,但无法通过 PDO 连接。您是故意将 -u 参数留空还是暗示用户名存在?同样,我可以从命令行连接,没有问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-10-31
    • 2020-03-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-02
    • 1970-01-01
    • 2017-11-02
    相关资源
    最近更新 更多