不能托管多个使用 docker 和 nginx 作为反向代理的 Wordpress 站点

Cannot host more than one Wordpress site with docker and nginx as reverse proxy

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

使用这两个站点中任何一个的 docker-compose 文件都可以正常工作并且站点上线了。添加第二个不起作用。 (导航到域会出现 'service temporarily unavailable' 的 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

预先为 link 所有容器创建了一个名为 nginx-proxy 的网络。我省略了有关 nginx 实例的详细信息,因为它使用众所周知的 jwilder 图像,就像我说的,它似乎工作得很好。

我终于找到了答案。它是双重的:

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

因此改变:

WORDPRESS_DB_HOST: db:3306

至:

WORDPRESS_DB_HOST: site1_db:3306

site2 显然也是如此

  1. 上面的修复仍然没有产生有效的设置。当更改数据库容器以从 mariadb 而不是 mysql 构建时,它开始工作了!我完全不知道为什么这是真的。特别是因为 mysql 实例可以独立工作,但是当 运行 同时工作时,只有 mariadb 工作