使用docker-compose将WordPress命名卷挂载到NGINX容器的子目录中

时间:2019-04-13 22:24:32

标签: wordpress docker nginx docker-compose

以下配置可正确提供WordPress实例。 (为简洁起见,省略了一些不相关的配置详细信息。)

docker-compose.yml

version: "3.7"

services:
  nginx:
    image: nginx:alpine
    links:
      - wordpress-1
    volumes:
      - wordpress-1_files:/var/www/html

  wordpress-1:
    image: wordpress:php7.3-fpm-alpine
    volumes:
      - wordpress-1_files:/var/www/html

volumes:
  wordpress-1_files:

wordpress-1.conf

server {
  server_name wordpress-1.com;
  root /var/www/html;

  index index.php;

  location / {
    try_files $uri $uri/ /index.php?$args;
  }

  location ~ \.php$ {
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME /var/www/html$fastcgi_script_name;
        fastcgi_pass wordpress-1:9000;
  }
}

但是,我想将wordpress-1_files卷挂载到/var/www/html/wordpress-1容器中的子目录(nginx)中(以便可以从同一个NGINX代理服务多个应用程序)。以下配置在响应正文中返回带有404的{​​{1}}。下面的File not found.中的两条SCRIPT_FILENAME行中的任何一条都会发生此结果。

docker-compose.yml

wordpress-1.conf

wordpress-1.conf

version: "3.7"

services:
  nginx:
    image: nginx:alpine
    links:
      - wordpress-1
    volumes:
      - wordpress-1_files:/var/www/html/wordpress-1

  wordpress-1:
    image: wordpress:php7.3-fpm-alpine
    volumes:
      - wordpress-1_files:/var/www/html

volumes:
  wordpress-1_files:

当我检查server { server_name wordpress-1.com; root /var/www/html/wordpress-1; index index.php; location / { try_files $uri $uri/ /index.php?$args; } location ~ \.php$ { include fastcgi_params; # fastcgi_param SCRIPT_FILENAME /var/www/html$fastcgi_script_name; fastcgi_param SCRIPT_FILENAME /var/www/html/wordpress-1$fastcgi_script_name; fastcgi_pass wordpress-1:9000; } } 中的NGINX error_log时,会看到以下内容:

  

在读取时在stderr中发送的FastCGI:“主脚本未知”   来自上游的响应标头,客户端:555.69.70.132,服务器:   wordpress-1.com,请求:“ GET / HTTP / 1.1”,上游:   “ fastcgi://172.18.0.3:9000”,主持人:“ wordpress-1.com”

这使我相信debug存在问题,但是SCRIPT_FILENAME/var/www/html$fastcgi_script_name似乎都不起作用。

问题:

在将/var/www/html/wordpress-1$fastcgi_script_name容器中的WordPress卷挂载到/var/www/html以外的其他目录时,如何调整第二对配置文件,以便为WordPress提供服务?

注意:上面的示例是我要解决的问题的简化示例,是最小示例。我正在从事的实际项目已经超过here

1 个答案:

答案 0 :(得分:0)

嗯,事实证明我的测试还不够彻底(尽管要花几天时间才能继续进行)。解决方案实际上是使用:

fastcgi_param SCRIPT_FILENAME /var/www/html$fastcgi_script_name;

这是因为在wordpress:php7.3-fpm-alpine图片的内部,这就是WordPress文件所在的路径。

在测试期间,我忘记了禁用位于暂存站点前面的CloudFlare的缓存。所以,我的测试并不总是在测试我认为的...