wordpress - 无法使用docker和nginx作为反向代理托管多个Wordpress网站

标签 wordpress docker nginx docker-compose digital-ocean

我正在尝试在一个Digital Ocean VPS上托管多个站点。我正在使用docker实现此目的。每个Wordpress网站都有其自己的数据库。

使用两个站点中任何一个的docker-compose文件都可以正常工作,并且该站点可以正常运行。添加一秒钟不起作用。 (导航到域会给出“服务暂时不可用”的Nginx错误)

我尝试基于apache图像从容器启动静态网站,并且确实可以正常工作。因此,nginx反向代理确实可以成功路由流量。

我猜想我需要在两个docker-compose文件之间进行更多更改。我发现的每个教程或示例在创建第一个教程或示例后都会停止,并且从未真正显示正在创建的第二个Wordpress网站。

WordPress网站1:

docker-compose.yml

version: "3"

services:
   db:
     image: mysql:5.7
     volumes:
       - db_data:/var/lib/mysql
     restart: always
     environment:
       MYSQL_ROOT_PASSWORD: somewordpress
       MYSQL_DATABASE: wordpress
       MYSQL_USER: wordpress
       MYSQL_PASSWORD: wordpress
     container_name: site1_db

   wordpress:
     depends_on:
       - db
     image: wordpress:latest
     expose:
       - 80
     restart: always
     environment:
       VIRTUAL_HOST: www.site1.com
       WORDPRESS_DB_HOST: db:3306
       WORDPRESS_DB_USER: wordpress
       WORDPRESS_DB_PASSWORD: wordpress
     container_name: site1_wp
volumes:
    db_data:

networks:
  default:
    external:
      name: nginx-proxy

WordPress网站2:

docker-compose.yml
version: "3"

services:
   db:
     image: mysql:5.7
     volumes:
       - db_data:/var/lib/mysql
     restart: always
     environment:
       MYSQL_ROOT_PASSWORD: somewordpress
       MYSQL_DATABASE: wordpress
       MYSQL_USER: wordpress
       MYSQL_PASSWORD: wordpress
     container_name: site2_db

   wordpress:
     depends_on:
       - db
     image: wordpress:latest
     expose:
       - 80
     restart: always
     environment:
       VIRTUAL_HOST: www.site2.com
       WORDPRESS_DB_HOST: db:3306
       WORDPRESS_DB_USER: wordpress
       WORDPRESS_DB_PASSWORD: wordpress
     container_name: site2_wp
volumes:
    db_data:

networks:
  default:
    external:
      name: nginx-proxy

事先创建了一个名为nginx-proxy的网络来链接所有容器。我省略了有关nginx实例的详细信息,因为它使用了众所周知的jwilder图像,而且就像我说的那样,它确实可以正常工作。

最佳答案

我终于找到了答案。它有两个方面:

  • WORDPRESS_DB_HOST环境变量不应该是服务,而应该是引用
  • 的容器

    因此更改:
    WORDPRESS_DB_HOST: db:3306
    

    至:
    WORDPRESS_DB_HOST: site1_db:3306
    

    显然,site2也是如此
  • 上面的修复程序仍然无法使安装程序正常工作。当更改数据库容器以从mariadb而非mysql构建时,它开始工作!我丝毫不知道为什么这是真的。尤其是因为mysql实例可以自行运行,但是当同时运行时,只有mariadb可以运行
  • 关于wordpress - 无法使用docker和nginx作为反向代理托管多个Wordpress网站,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48456879/

    相关文章:

    php - Woocommerce 添加到购物车条件

    Wordpress 插件中的 Ajax

    在 nginx 中记录代理事件

    linux - 在 nginx 和 lighttpd 之间,哪个最适合网络应用程序 (SaaS) 的需求,为什么?

    php - 在 WordPress 小部件问题中保存复选框值

    WordPress WP_Query - 仅查询父页面

    docker - 构建镜像时从 Docker 容器以 localhost 身份访问主机

    linux - 错误 : Named volume "xplore:/root/xPlore/rtdata:rw" is used in service "dsearch" but no declaration was found in the volumes section

    python - 对于运行 "python myapp.py images/*"的 Flask 应用程序,我应该为 Docker CMD 和 ENTRYPOINT 放置什么

    node.js - nginx 上的代理传递 Socket.IO 连接不起作用