J'ai un Dockerfile et un fichier de configuration nginx personnalisé (dans le même répertoire avec Dockerfile) comme suit:
Dockerfile:
FROM nginx
COPY nginx.conf /etc/nginx/nginx.conf
fichier nginx.conf:
upstream myapp1 {
least_conn;
server http://domain.com:81;
server http://domain.com:82;
server http://domain.com:83;
}
server {
listen 80;
location / {
proxy_pass http://myapp1;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $Host;
proxy_cache_bypass $http_upgrade;
}
}
J'exécute ces deux commandes:
docker --tls build -t nginx-image .
docker --tls run -d -p 80:80 --name nginx nginx-image
Ensuite, j'ai vérifié tous les conteneurs en cours d'exécution, mais il ne s'est pas affiché. Lorsque j'ai recherché le journal du conteneur nginx, j'ai trouvé ce message d'erreur:
[Emerg] 1 # 1: directive inconnue "en amont" dans /etc/nginx/nginx.conf:1 nginx: [Emerg] directive inconnue "en amont" dans /etc/nginx/nginx.conf:
Qu'est-ce que je rate?
Comme mentionné dans la documentation NGiNX , upstream
est censé être défini dans un contexte http
.
Comme mentionné dans nginx
directive inconnue "upstream
" :
Lorsque ce fichier est inclus normalement par
nginx.conf
, il est déjà inclus dans le contextehttp
:
http {
include /etc/nginx/sites-enabled/*;
}
Vous devez soit utiliser
-c /etc/nginx/nginx.conf
ou faites un petit wrapper comme le bloc ci-dessus etnginx -c
il.
Dans le cas de Docker, vous pouvez voir différentes options avec abevoelker/docker-nginx
:
docker run -v /tmp/foo:/foo abevoelker/nginx nginx -c /foo/nginx.conf
Pour une valeur par défaut nginx.conf
, vérifiez votre CMD
:
CMD ["nginx", "-c", "/data/conf/nginx.conf"]
Un exemple pour ajouter la configuration gzip:
docker run -v [./]gzip.conf:/etc/nginx/conf.d/gzip.conf nginx
ou docker-compose:
version: '3'
services:
nginx:
image: nginx
volumes:
- ./gzip.conf:/etc/nginx/conf.d/gzip.conf
- ./html:/usr/share/nginx/html:ro