web-dev-qa-db-ja.com

DockerFileでNginxの別のポートを公開する

DockerFileは初めてです。 Nginxがポート8080でリッスンするようにしたい。だから私はこのようにdockerFileを書いた:

FROM nginx:1.11-Alpine
COPY index.html /usr/share/nginx/html
EXPOSE 8080
CMD ["nginx", "-g" , "daemon off;"]

しかし、このコマンドでイメージを作成してコンテナを実行した後:

docker run -d -p 80:8080 nginxt:v3

localhostのCurlでこのエラーが発生します:

curl: (56) Recv failure: Connection reset by peer

私は何が間違っているのですか? EXPOSE 8080はNginxが8080でリッスンされる必要があることを意味しませんか?

2
eng.sabbath

DockerfileでEXPOSE 8080を定義することにより、 公開されたコンテナポート のみを変更しますが、Nginxサーバーは引き続きポート80でリッスンします(デフォルトで構成されているため)。

Nginx listen 構成を変更して、新しい公開ポートに一致させる必要があります。

ほとんどのDocker実装とは異なり、Nginxは環境変数を使用したこのような構成をサポートしていません(Docker Hubページの Nginx構成での環境変数の使用 を参照してください)。

Nginxのデフォルト設定を適用したい場合は、新しいnginx.conflisten 8080;構成で作成し、DockerfileでCOPYを使用して元の構成を置き換える必要があります。

「1行の回避策」が必要な場合は、コマンドを変更して、起動するたびに構成を置き換えることができます。

FROM nginx:1.11-Alpine
COPY index.html /usr/share/nginx/html
EXPOSE 8080
CMD ["/bin/sh", "-c", "sed -i 's/listen  .*/listen 8080;/g' /etc/nginx/conf.d/default.conf && exec nginx -g 'daemon off;'"]
1