web-dev-qa-db-ja.com

カスタム構成でnginx Dockerコンテナーを実行する方法?

次のように、Dockerfileとカスタムnginx構成ファイル(Dockerfileと同じディレクトリ内)があります。

Dockerfile:

FROM nginx

COPY nginx.conf /etc/nginx/nginx.conf

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

次の2つのコマンドを実行します。

docker --tls build -t nginx-image .
docker --tls run -d -p 80:80 --name nginx nginx-image

次に、実行中のすべてのコンテナをチェックアウトしましたが、表示されませんでした。 nginxコンテナのログを検索すると、次のエラーメッセージが見つかりました。

[emerg] 1#1:/etc/nginx/nginx.conf:1の不明なディレクティブ「上流」nginx:[emerg] /etc/nginx/nginx.confの不明なディレクティブ「上流」:

何が欠けていますか?

NGiNXドキュメント で述べたように、upstreamhttpコンテキストで定義されることになっています。

nginx不明なディレクティブ「upstream で述べたように:

そのファイルがnginx.confによって正常に含まれている場合、httpコンテキスト内にすでに含まれています。

http {
  include /etc/nginx/sites-enabled/*;
}

-c /etc/nginx/nginx.confを使用するか、上記のブロックのような小さなラッパーを作成してnginx -cにする必要があります。

Dockerの場合、さまざまなオプションを abevoelker/docker-nginx で確認できます。

docker run -v /tmp/foo:/foo abevoelker/nginx nginx -c /foo/nginx.conf

デフォルトのnginx.confの場合 CMDを確認してください

CMD ["nginx", "-c", "/data/conf/nginx.conf"]
12
VonC

Gzip設定を追加する例:

docker run -v [./]gzip.conf:/etc/nginx/conf.d/gzip.conf nginx

または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