对于本地开发,我有一套包含 5 个站点的套件。
每个站点都在自己的 php-fpm 容器中运行。
所有站点均由单个 nginx 容器提供服务,其中包含.conf
所有站点的文件。它们共享端口,并由 server_name 标识。
问题
为了启动 nginx 容器,所有 5 个 php-fpm 容器必须已经运行。
如果其中一个没有运行,nginx 容器将循环失败,并在其日志中显示以下内容:
2023-03-28 12:39:28 meq_nginx | /docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration
2023-03-28 12:39:28 meq_nginx | /docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/
2023-03-28 12:39:28 meq_nginx | /docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh
2023-03-28 12:39:28 meq_nginx | 10-listen-on-ipv6-by-default.sh: info: /etc/nginx/conf.d/default.conf is not a file or does not exist
2023-03-28 12:39:28 meq_nginx | /docker-entrypoint.sh: Launching /docker-entrypoint.d/20-envsubst-on-templates.sh
2023-03-28 12:39:28 meq_nginx | /docker-entrypoint.sh: Launching /docker-entrypoint.d/30-tune-worker-processes.sh
2023-03-28 12:39:28 meq_nginx | /docker-entrypoint.sh: Configuration complete; ready for start up
2023-03-28 12:39:28 meq_nginx | 2023/03/28 16:39:28 [emerg] 1#1: host not found in upstream "mysite" in /etc/nginx/conf.d/mysite.conf:29
2023-03-28 12:39:28 meq_nginx | nginx: [emerg] host not found in upstream "mysite" in /etc/nginx/conf.d/mysite.conf:29
在 /etc/nginx/conf.d/mysite.conf:29 的上游“mysite”中找不到主机
参考这个配置:
server {
listen 443 ssl http2;
location ~ ^/index\\.php(/|$) {
fastcgi_pass mysite:9000;
...
...其中“mysite”是尚未启动的 php-fpm 容器的名称。
期望的行为
- 只要其容器正在运行,任何站点都应该可以工作。
- 如果已配置站点之一的容器未运行,则不应阻止 nginx 容器启动并为其他站点提供服务。
- 如果站点的容器在 nginx 启动后启动,则 nginx 应该能够为其提供服务。