質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
HTTP

HTTP(Hypertext Transfer Protocol)とはweb上でHTML等のコンテンツを交換するために使われるアプリケーション層の通信プロトコルです。

Ubuntu

Ubuntuは、Debian GNU/Linuxを基盤としたフリーのオペレーティングシステムです。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

Q&A

1回答

1050閲覧

UbuntuでDockerを起動するも、Localhostに配置のアプリにアクセスした際にエラー

s.daiki

総合スコア0

HTTP

HTTP(Hypertext Transfer Protocol)とはweb上でHTML等のコンテンツを交換するために使われるアプリケーション層の通信プロトコルです。

Ubuntu

Ubuntuは、Debian GNU/Linuxを基盤としたフリーのオペレーティングシステムです。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

0グッド

0クリップ

投稿2021/06/02 06:19

編集2021/06/02 06:46

前提・実現したいこと

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 でポートのエラーが出る理由が分かりません。

原因についてわかる方いましたらご教示いただけないでしょうか。
よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hope_mucci

2021/06/02 06:24

ソースコードは、引用">"ではなく、コードブロック (ソースコードを```と```で囲う)を使って書きましょう。右側のプレビューもきちんと確認しながら質問文を書きましょう。 特にpythonはインデントがなくなるとプログラム自体が動作しないので、必ずコードブロックを使いましょう。
s.daiki

2021/06/02 06:47

ご指摘ありがとうございます。コードブロックを用いた形に修正いたしました。
hope_mucci

2021/06/02 07:08

修正してもらったのはいいですが、そのpythonコードではインデント不整合エラーになると思います。 本当にそのソースを実行させているのですか?
guest

回答1

0

掲載の内容の通りで実行できました。
pythonのインデントは適当に修正して実行しています。
pythonのインデントが質問文の通りなら動作しませんので修正してください。

requirement

txt

1Flask

python

1# app.py 2from flask import Flask 3 4import os 5import socket 6 7app = Flask(__name__) 8 9 10@app.route("/") 11def hello(): 12 html = "<h3>Hello World!</h3>" 13 return html.format() 14 15 16if __name__ == "__main__": 17 app.run(host='0.0.0.0', port=80) 18

Dockerfile

1# ベースイメージとして python v3.6 を使用する 2FROM python:3.6 3 4# 以降の RUN, CMD コマンドで使われる作業ディレクトリを指定する 5WORKDIR /app 6 7# カレントディレクトリにある資産をコンテナ上の 「/app」 ディレクトリにコピーする 8ADD . /app 9 10# 「 requirements.txt 」にリストされたパッケージをインストールする 11RUN pip install --trusted-host pypi.python.org -r requirements.txt 12 13# Docker に対して「 80 番ポート 」で待受けするよう指定する 14EXPOSE 80 15 16# Docker イメージ中の環境変数を指定する 17ENV NAME World 18 19# コンテナが起動したときに実行される命令を指定する 20# ここでは後述の 「app.py 」を実行するよう指示している 21CMD ["python", "app.py"] 22

実行コマンド

docker build -t hello-world . docker run -d -p 4000:80 hello-world # 上記のあとブラウザからアクセス(http://localhost:4000/) # hello world表示を確認。

投稿2021/06/02 07:04

FiroProchainezo

総合スコア2424

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問