【问题标题】:Mount WordPress named volume in subdirectory of NGINX container with docker-compose使用 docker-compose 在 NGINX 容器的子目录中挂载 WordPress 命名卷
【发布时间】:2019-09-04 07:48:51
【问题描述】:

以下配置正确地服务于 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 卷挂载到 nginx 容器中的子目录 (/var/www/html/wordpress-1)(这样我就可以从同一个 NGINX 代理服务多个应用程序)。下面的配置在响应正文中返回 404File not found.。下面wordpress-1.conf 中的两个SCRIPT_FILENAME 行中的任何一个都会出现此结果。

docker-compose.yml

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:

wordpress-1.conf

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;
  }
}

当我检查 debug 中的 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”

这让我相信SCRIPT_FILENAME 存在问题,但/var/www/html$fastcgi_script_name/var/www/html/wordpress-1$fastcgi_script_name 似乎都不起作用。

问题:

如何调整我的第二对配置文件,以便在将 WordPress 卷安装到 nginx 容器中的 /var/www/html 以外的目录时可以为 WordPress 提供服务?

注意:以上示例是我试图解决的问题的精简示例。我正在做的实际项目已经结束了here

【问题讨论】:

    标签: wordpress docker nginx docker-compose


    【解决方案1】:

    呃,事实证明我的测试还不够彻底(尽管断断续续地做了几天)。该解决方案实际上是使用:

    fastcgi_param SCRIPT_FILENAME /var/www/html$fastcgi_script_name;

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

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

    【讨论】:

    • 您是否找到了将 wordpress 的默认安装位置 (/var/www/html/) 更改为其他位置的方法,从而避免了这个问题?
    • 嗯,我想我没试过。我认为您可以创建自己的 Docker 映像,使用官方 WordPress 映像作为其基础,并将文件移动到所需位置。但是,我还没有尝试过。
    • 是的,这实际上是一个有趣的想法......谢谢。
    猜你喜欢
    • 2019-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-23
    • 1970-01-01
    相关资源
    最近更新 更多