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

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

我有一个从中克隆的 LEMP 堆栈的 docker 设置这个仓库

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

[emerg] 1#1: host not found in upstream "php-fpm:9000" in /etc/nginx/conf.d/upstream.conf:1

该错误来自两个文件。

第一的: 来自此 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

第二 从这个 Nginx default.conf 文件

以下是代码:

    location ~ \.php$ {
      ...
      fastcgi_pass php-upstream;
      ...
    }

我说这两个文件是原因,因为其他地方没有对 php-upstream 的引用。

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

答案1

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

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

此外,你应该使用选项手动将 nginx 指向 docker 的内部 DNS。dockerresolver内部 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; 

答案2

我有同样的问题,我可以通过添加到 php-fpm 的链接来解决,如下所示:

services:
  php-fpm:
    build:
      context: ./php-fpm
    volumes: 
      - ../www:/var/www/html
    depends_on:
      - database
    links:
      - database:db      

  nginx:
    build:
      context: ./nginx
    volumes:
      - ../www:/var/www/html
      - ./nginx/nginx.conf:/etc/nginx/nginx.conf
      - ./nginx/sites/:/etc/nginx/sites-available
      - ./nginx/conf.d/:/etc/nginx/conf.d     
      - ./nginx/log/:/var/log/nginx
    ports:
      - "8080:80"
      - "443:443"
    depends_on:
      - php-fpm
    links:
      - php-fpm

相关内容