【问题标题】:Wordpress not connecting to database with nginx, letsencrypt, and docker composeWordpress 未使用 nginx、letsencrypt 和 docker compose 连接到数据库
【发布时间】:2020-05-01 19:07:39
【问题描述】:

我有一个使用 debian 10 的 VPS 设置,并希望使用 docker compose 添加多个 wqordpress 站点。我在单独的容器中使用 nginx 和letsencrypt ......那部分似乎正在工作。我得到了 SSL 并且可以 ping 站点,但是 WP 不会连接到数据库,我觉得我错过了一些简单的东西......我是 docker 和 compose 的新手

这是我的 docker-compose.yml 文件

version: "3"

services:
   db_domain:
     image: mysql:5.7
     volumes:
        - db_data:/var/lib/mysql
     restart: always
     environment:
        MYSQL_ROOT_PASSWORD: Password1234
        MYSQL_DATABASE: domain-db
        MYSQL_USER: domainUser
        MYSQL_PASSWORD: otherPassword1234
     container_name: domain-db

   wordpress:
     depends_on:
        - db_domain
     image: wordpress:latest
     expose:
        - 80
     restart: always
     environment:
        VIRTUAL_HOST: domain.com
        LETSENCRYPT_HOST: domain.com
        LETSENCRYPT_EMAIL: admin@domain.com
        WORDPRESS_DB_HOST: db_domain:3306
        WORDPRESS_DB_USER: domainUser
        WORDPRESS_DB_PASSWORD: otherPassword1234
     container_name: domain-wp
volumes:
  db_data:

networks:
  default:
    external:
      name: nginx-proxy

【问题讨论】:

    标签: wordpress docker nginx docker-compose


    【解决方案1】:

    您有几个问题:Mysql 服务的环境变量设置不正确,Wordpress 服务缺少 WORDPRESS_DB_NAME: domain-db 环境变量。 这是一个没有数据库错误的配置:

    version: "3"
    
    services:
       db_domain:
         image: mysql:5.7
         volumes:
            - db_data:/var/lib/mysql
         restart: always
         environment:
            - MYSQL_ROOT_PASSWORD=Password1234
            - MYSQL_DATABASE=domain-db
            - MYSQL_USER=domainUser
            - MYSQL_PASSWORD=otherPassword1234
         container_name: domain-db
         ports:
           - "3306:3306"
       wordpress:
         depends_on:
            - db_domain
         image: wordpress:latest
         expose:
            - 80
         restart: always
         environment:
            VIRTUAL_HOST: domain.com
            LETSENCRYPT_HOST: domain.com
            LETSENCRYPT_EMAIL: admin@domain.com
            WORDPRESS_DB_HOST: db_domain:3306
            WORDPRESS_DB_USER: domainUser
            WORDPRESS_DB_PASSWORD: otherPassword1234
            WORDPRESS_DB_NAME: domain-db
         container_name: domain-wp
    volumes:
      db_data:
    

    【讨论】:

    • 这绝对让我指出了正确的方向,谢谢...它仍然无法连接到数据库,在检查了该容器的 docker 日志后,它正在重新启动并失败,所以我切换使用 mariadb 图像而不是 mysql 图像......那个会正确出现但仍然无法连接。日志显示 DB 用户拒绝访问。密码是一样的,我什至把它们放到了超级简单的密码中进行测试。对此有什么想法吗?
    • 不确定我是否了解您现在在哪里看到错误。你在看什么?我运行 docker compose up,当容器出现时我没有看到任何错误。我忘记提到的一件事是,用户和密码的环境变量仅在数据库第一次出现时才被评估。因此,如果您在 docker-compose 上更改了它们,那么您需要在更改后启动容器之前删除本地的 db_data 文件夹。
    • 当你说删除我本地的 db_data 文件夹时……是在主机上吗?我每次都在移除容器,并在我尝试的每次迭代中重新恢复它们。这是我在容器日志 2020-05-02 2:55:19 17 [Warning] Access denied for user 'user'@'172.19.0.6' 中看到的错误(使用密码:YES)
    • 是的,删除主机上的db_data,否则不会重新评估user和pwd的环境变量值。这些仅在第一次初始化数据库时设置(这是填充 db_data 文件夹的内容)。之后这些变量将被忽略
    【解决方案2】:

    你必须添加这个WORDPRESS_DB_NAME: domain-db

    而且 WORDPRESS_DB_PASSWORD 必须等于 MYSQL_PASSWORD。

    无论如何,RTFM -> https://hub.docker.com/_/wordpress/

    最好的问候。

    【讨论】:

    • 肯定在读...所以我添加了 WORDPRESS_DB_NAME: 并确认密码相同,仍然没有连接到数据库。
    • 尝试删除-> WORDPRESS_DB_HOST: db_domain:3306 中的端口。或者直接使用 dockerhub 中的例子,就可以了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-09-18
    • 1970-01-01
    • 2018-12-21
    • 1970-01-01
    • 1970-01-01
    • 2019-12-04
    • 2020-06-28
    相关资源
    最近更新 更多