【问题标题】:Docker Wordpress not connecting with docker Mysql ComposeDocker Wordpress 未与 docker Mysql Compose 连接
【发布时间】:2020-09-18 14:58:10
【问题描述】:

我正在尝试使用 docker 使用 nginx 反向代理服务器在同一台服务器上设置多个 WordPress 站点。我有一个网络设置,nginx 代理在名为 nginx-proxy 的端口 80 上侦听。我确认它们都在同一个 docker 网络上。但是,我仍然得到 WordPress 无法与数据库通信。我可以确认凭据是正确的,并且 MySQL 正在另一个 docker 容器上运行。

通过我的测试,如果我更新虚拟主机并在 Web 浏览器中打开它,转发代理就会工作,它确实会在该页面上打开错误消息。我可以从它们的外壳中 ping 两个容器。我不确定我做错了什么我对版本 3 中的 dockers 网络比较新。我不相信 docker 在平台之间存在差异,但如果它确实存在,我会在 Mac OS 上运行它。

我知道还有其他类似的帖子使用链接和版本 2,但是,我无法找到包含解决我问题的信息的版本 3。

version: "3.3"

    services:
       db_node_domain:
         image: mysql:5.7
         volumes:
           - db_data:/var/lib/mysql
         restart: always
         environment:
           MYSQL_ROOT_PASSWORD: PASSWORD
           MYSQL_DATABASE: wordpress
           MYSQL_USER: wordpress
           MYSQL_PASSWORD: PASSWORD
         container_name: wordpress_db

       wordpress:
         depends_on:
           - db_node_domain
         image: wordpress:latest
         expose:
           - 80
         restart: always
         environment:
           VIRTUAL_HOST: domain.com
           WORDPRESS_DB_HOST: db_node_domain:3306
           WORDPRESS_DB_USER: wordpress
           WORDPRESS_DB_PASSWORD: PASSWORD
         container_name: wordpress
    volumes:
        db_data: {}

    networks:
      default:
        external:
          name: nginx-proxy

如果需要更多信息,请告诉我。感谢您提供的任何帮助。

【问题讨论】:

    标签: mysql wordpress docker nginx proxy


    【解决方案1】:

    我已经隔离了这个问题。这是我第一次玩 docker 卷。更新数据库信息时忘记清除卷。所以我用导致错误的新信息连接到旧数据库(这就是为什么你不要试图在深夜睡觉时学习新东西)。一旦我删除了卷重新组合了 docker 容器,它就可以完美地工作。

    感谢每一位帮助我的人。

    【讨论】:

      【解决方案2】:

      您可以将其用作下面的 docker compose 文件。

      参考: https://github.com/docker/awesome-compose/tree/master/wordpress-mysql

      version: '3.7'
      services:
        db:
          image: mysql:8.0.19
          command: '--default-authentication-plugin=mysql_native_password'
          restart: always
          volumes:
            - db_data:/var/lib/mysql
          restart: always
          environment:
            - MYSQL_ROOT_PASSWORD=somewordpress
            - MYSQL_DATABASE=wordpress
            - MYSQL_USER=wordpress
            - MYSQL_PASSWORD=wordpress
        wordpress:
          image: wordpress:latest
          ports:
            - 80:80
          restart: always
          environment:
            - WORDPRESS_DB_HOST=db
            - WORDPRESS_DB_USER=wordpress
            - WORDPRESS_DB_PASSWORD=wordpress
            - WORDPRESS_DB_NAME=wordpress
      volumes:
        db_data:
      

      【讨论】:

      • 这不会完成我想要做的事情。因为它将容器的 80 端口绑定到计算机。目前这将与代理冲突。我的目标是让它们相互隔离并公开 80 端口以供代理查看而不是绑定它。不过感谢您的帮助。
      【解决方案3】:

      我没有发现您的 docker-compose 文件有任何问题,它也在我的本地机器 macOS 上运行。
      有一件事,由于 MySQL 初始化,'wordpress' 容器在第一次启动时将无法使用MySQL Connection Error: (2002) Connection refused 多次启动。重试几次后,它应该会连接到“wordpress_db”。
      如果重试后仍然无法连接,能否附上“wordpress”容器的日志?

      【讨论】:

      • 您好 hwwi,我给了它一些时间并重新启动了几次。 MySQL 运行正常。这几乎就像 docker DNS 存在问题一样。这是我的 WordPress docker 容器的 docker 日志。如果我需要提取不同的日志,请告诉我。 pastebin.com/54KLgnyx 我也从 MySQL 服务器 [info] MySQL Community Server 5.7.30 正在运行中获得此状态。
      • 我认为我的 mac 上的 docker 网络有问题。我在我的测试服务器和我的本地开发机器上运行了这段代码,它工作正常。我不确定如何解决此问题以解决此问题。有点恼火我之前没有在服务器上尝试过,并且为自己节省了 8 个小时的尝试,但没有任何成功。