前提・実現したいこと
Ubuntu18.04の環境にDockerをインストールし、Helloworldを表示する簡易アプリを作りました。
このページに記載の通り進めています。
https://qiita.com/ksh-fthr/items/e914ff213791b7150008
使用しているDockerファイルの中身はこちらです
# ベースイメージとして python v3.6 を使用する FROM python:3.6 # 以降の RUN, CMD コマンドで使われる作業ディレクトリを指定する WORKDIR /app # カレントディレクトリにある資産をコンテナ上の 「/app」 ディレクトリにコピーする ADD . /app # 「 requirements.txt 」にリストされたパッケージをインストールする RUN pip install --trusted-host pypi.python.org -r requirements.txt # Docker に対して「 80 番ポート 」で待受けするよう指定する EXPOSE 80 # Docker イメージ中の環境変数を指定する ENV NAME World # コンテナが起動したときに実行される命令を指定する # ここでは後述の 「app.py 」を実行するよう指示している CMD ["python", "app.py"]
app.pyはこちら(インデントが見づらくすみません)
from flask import Flask import os import socket app = Flask(__name__) @app.route("/") def hello(): html = "<h3>Hello World!</h3>" return html.format() if __name__ == "__main__": app.run(host='0.0.0.0', port=80)
上記を用意し、
$ docker build -t hello-world .
$ docker run -d -p 4000:80 hello-world
でDockerビルド&起動後、
$ docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest 8d163a0c71f0 54 minutes ago 886MB
python 3.6 f3411dca4721 8 days ago 875MB
でDockerの状態確認し、
curl http://localhost:4000
を実行したところ、毎回下記エラーが出てしまします。
curl: (7) Failed to connect to localhost port 4000: Connection refused
ファイアウォールはこの通り設定しています
$ sudo ufw status
Status: active
To Action From
80 ALLOW Anywhere
4000 ALLOW Anywhere
22 ALLOW Anywhere
80 (v6) ALLOW Anywhere (v6)
4000 (v6) ALLOW Anywhere (v6)
22 (v6) ALLOW Anywhere (v6)
docker run した時にローカルのポート4000と、アプリ側のポート80 をマッピングしているのに、
curl http://localhost:4000 でポートのエラーが出る理由が分かりません。
原因についてわかる方いましたらご教示いただけないでしょうか。
よろしくお願いします。