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.
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;
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.
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