web-dev-qa-db-fra.com

Erreur Docker + Nginx + PHP-FPM: [Emerg] 1 # 1: hôte non trouvé en amont

J'ai une configuration de docker pour la pile LEMP à partir de laquelle j'ai cloné ce dépôt .

Tout fonctionne bien sur ma machine de développement exécutant la fenêtre 10, mais lorsque je pousse l'image vers le docker hub et la tire sur mon VPS, peu importe ce que je fais, j'obtiens toujours cette erreur:

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

Cette erreur provient de deux fichiers.

Premièrement: à partir de ce fichier Nginx Docker

Voici le code:

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

Deuxième à partir de ce fichier Nginx default.conf

Voici le code:

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

Je dis que ces deux fichiers sont la cause b/c il n'y a aucune référence de php-upstream ailleurs.

J'ai essayé toutes les combinaisons possibles d'ajout/suppression d'hôtes, en ajoutant depends_on, modification de nginx, version php, désactivation de selinux mais cela ne fonctionne tout simplement pas. J'ai toujours la même erreur sur la production, mais sur le serveur local, tout fonctionne.

3
samayo

nginx ne parvient pas à résoudre le nom d'hôte php-fpm et refuse donc de démarrer.

Il existe une solution de contournement simple qui, dans ce cas, entraîne un 502 - Bad Gateway jusqu'à ce que nginx soit capable de résoudre le nom d'hôte en amont: Mettez l'adresse en amont dans une variable!

De plus, vous devez pointer manuellement nginx vers le DNS interne du docker avec l'option resolver. Le serveur DNS interne du docker est toujours à 127.0.0.11 comme dans la documentation .

    resolver 127.0.0.11;
    set $upstream php-fpm:9000;
    # nginx will now start if Host is not reachable
    fastcgi_pass    $upstream; 
3
Nicolai Fröhlich

Donc, cette erreur me semble essayer de résoudre ce qu'est "php-fpm: 9000" et échouer. Cette ligne définit la variable, y a-t-il quelque chose de différent sur votre machine locale que ce qui est en production?

Utilisez-vous le même fichier docker-compose.yml? D'après ce que je peux dire, il semble que vous devez avoir le conteneur php-fpm en cours d'exécution avant de pouvoir exécuter le conteneur nginx.

1
Jon Buys

j'ai le même problème, je peux le résoudre en ajoutant des liens vers php-fpm comme ceci:

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
0
Ari Pratomo