Docker + Nginx + Erro PHP-FPM: [emerg] 1 # 1: host não encontrado no upstream

1

Eu tenho este erro por 3 (dias inteiros) e ainda estou tentando descobrir o problema e, ao mesmo tempo, pensando em suicídio:)

Eu tenho uma configuração do docker para a pilha LEMP que eu clonei deste repo:

link

Tudo funciona muito bem na minha máquina de desenvolvimento que está executando a janela 10, mas quando eu pressiono a imagem no hub do docker e a puxo no meu VPS, não importa o que eu faça, sempre recebo esse erro:

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

Este erro é proveniente de dois arquivos.

Primeiro: A partir desse arquivo do Nginx Docker

Aqui está o código:

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

Segundo A partir desse arquivo Nginx default.conf

Aqui está o código:

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

Eu digo que esses dois arquivos são a causa b / c não há nenhuma referência do php-upstream em outro lugar.

Eu tentei todas as combinações possíveis de adicionar / remover hosts, adicionando depens_on , alterando nginx, versão php, desabilitando o selinux, mas isso simplesmente não funciona. Eu sempre recebo o mesmo erro na produção, mas no servidor local sempre trabalhando.

    
por ANW 11.10.2018 / 18:37

2 respostas

1

Então, esse erro me parece que está tentando resolver o que é "php-fpm: 9000" e falhando. Esta linha define a variável, há algo diferente em sua máquina local do que o que está em produção ?

Você está implantando usando o mesmo arquivo docker-compose.yml? Pelo que posso dizer, parece que você precisa ter o contêiner php-fpm em execução antes de poder executar o contêiner nginx.

    
por 11.10.2018 / 21:57
1

O nginx não consegue resolver o nome do host php-fpm e, portanto, se recusa a iniciar.

Existe uma solução simples que - nesse caso - resulta em um 502 - Bad Gateway até que o nginx consiga resolver o nome do host do upstream: Coloque o endereço upstream em uma variável!

Além disso, você deve apontar manualmente o nginx para o DNS interno do Docker com a opção resolver . O servidor DNS interno do docker está sempre em 127.0.0.11 , como se encontra na documentação .

    resolver 127.0.0.11;
    set $upstream php-fpm:9000;
    # nginx will now start if host is not reachable
    fastcgi_pass    $upstream; 
    
por 15.10.2018 / 11:33