Docker + Nginx + PHP-FPM 错误:[emerg] 1#1: 在上游找不到主机

sam*_*ayo 6 nginx php-fpm docker docker-compose docker-machine

我有一个从这个 repo克隆的 LEMP 堆栈的 docker 设置。

在运行窗口 10 的开发机器上一切正常,但是当我将图像推送到 docker hub 并将其拉到我的 VPS 上时,无论我做什么,我总是收到此错误:

[emerg] 1#1: host not found in upstream "php-fpm:9000" in /etc/nginx/conf.d/upstream.conf:1
Run Code Online (Sandbox Code Playgroud)

此错误来自两个文件。

第一: 来自这个 Nginx Docker 文件

这是代码:

RUN echo "upstream php-upstream { server ${PHP_UPSTREAM_CONTAINER}:${PHP_UPSTREAM_PORT}; }" > /etc/nginx/conf.d/upstream.conf \
&& rm /etc/nginx/conf.d/default.conf
Run Code Online (Sandbox Code Playgroud)

第二个 来自这个 Nginx default.conf 文件

这是代码:

    location ~ \.php$ {
      ...
      fastcgi_pass php-upstream;
      ...
    }
Run Code Online (Sandbox Code Playgroud)

我说这两个文件是 b/c 其他地方没有引用 php-upstream 的原因。

我已经尝试了添加/删除主机、添加depends_on、更改 nginx、php 版本、禁用 selinux 的所有可能组合,但它不起作用。我总是在生产中遇到相同的错误,但在本地服务器上一切正常。

小智 6

nginx 无法解析主机名php-fpm,因此拒绝启动。

有一个简单的解决方法 - 在这种情况下 - 导致502 - Bad Gateway直到 nginx 能够解析上游的主机名:将上游地址放入变量中!

此外,您应该使用resolver选项手动将 nginx 指向 docker 的内部 DNS 。泊坞窗内部DNS服务器始终处于127.0.0.11至于中找到文件

    resolver 127.0.0.11;
    set $upstream php-fpm:9000;
    # nginx will now start if host is not reachable
    fastcgi_pass    $upstream; 
Run Code Online (Sandbox Code Playgroud)