Назад | Перейти на главную страницу

Ошибка Docker + Nginx + PHP-FPM: [Emerg] 1 # 1: хост не найден в восходящем потоке

У меня есть докер для стека LEMP, который я клонировал из это репо.

Все работает нормально на моей машине разработки, на которой запущено окно 10, но когда я отправляю изображение в концентратор докеров и загружаю его на свой 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, но это просто не работает. Я всегда получаю одну и ту же ошибку при производстве, но на локальном сервере все работает.

nginx не может разрешить имя хоста php-fpm и поэтому отказывается заводиться.

Существует простой обходной путь, который в данном случае приводит к 502 - Bad Gateway пока nginx не сможет разрешить имя хоста восходящего потока: поместите адрес восходящего потока в переменную!

Далее вы должны вручную указать nginx на внутренний DNS докера с resolver вариант. Внутренний 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; 

У меня такая же проблема, я могу решить, добавив ссылки на 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