web-dev-qa-db-fra.com

comment exécuter le conteneur docker nginx avec une configuration personnalisée?

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?

18

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 contexte http:

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 et nginx -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"]
12
VonC

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
0
Reilly Beacom