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でリッスンされる必要があることを意味しませんか?
DockerfileでEXPOSE 8080
を定義することにより、 公開されたコンテナポート のみを変更しますが、Nginxサーバーは引き続きポート80でリッスンします(デフォルトで構成されているため)。
Nginx listen
構成を変更して、新しい公開ポートに一致させる必要があります。
ほとんどのDocker実装とは異なり、Nginxは環境変数を使用したこのような構成をサポートしていません(Docker Hubページの Nginx構成での環境変数の使用 を参照してください)。
Nginxのデフォルト設定を適用したい場合は、新しいnginx.conf
をlisten 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;'"]