🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Bottle

Bottleは、PythonのWebサーバです。1つのPythonファイルで構成されており、非常に軽量。Web APIの作成や導入が簡単で、DjangoやFlaskに比べ使いやすくシンプルなことが特徴です。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Docker

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

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

2回答

1592閲覧

Docker上で構築したbottle環境のWEBサイトにアクセスしたい

Majespy

総合スコア22

Bottle

Bottleは、PythonのWebサーバです。1つのPythonファイルで構成されており、非常に軽量。Web APIの作成や導入が簡単で、DjangoやFlaskに比べ使いやすくシンプルなことが特徴です。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Docker

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

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2021/03/27 15:02

編集2021/03/28 06:35

背景

Pythonの技術書[つくりながら学ぶ! Pythonセキュリティプログラミング]を用いて、
今回初めてDockerを使用した学習をしております。
※Docker未経験です。

実現したいこと

Docker上で構築したbottle環境のWEBサイトにアクセスしたいです。

同様の質問があったため、参考までに提示いたします。
https://teratail.com/questions/195241

発生している問題・エラーメッセージ

書籍の中でDocker上でbottleを起動させWEBサイトを表示する内容があるため、
同様にコードを書き実行しているのですがWEBサイトにアクセスすることができません。

pythonファイルはサンプルコードそのまま転記しており、
実行後以下の文が表示されるためコードに問題はないと考えております。

python3 bottle_sample.py Bottle v0.12.19 server starting up (using WSGIRefServer())... Listening on http://0.0.0.0:8080/

WEBサイトへのアクセス方法は次の手順で実施
①Dockerコンテナ内のシェルでコマンド[ python3 bottle_sample.py ]をたたく
②Dockerコンテナ内のシェルでコマンド[ hostname -i ]をたたく
③ブラウザのアドレスバーに[ http://②のアドレス:8080/ ]を入力
④[ このサイトにアクセスできません ②のアドレス からの応答時間が長すぎます。 ]が表示される

該当のソースコード

Python3

1from bottle import route 2from bottle import run 3from bottle import request 4 5@route('/') 6def hello(user=''): 7 username = request.query.get('user') 8 username = '' if username is None else username 9 10 html = "<h2> Hello { name } </h2>".format(name=username) 11 12 return html 13 14run(host='0.0.0.0', port=8080, debug=True)

試したこと

③ブラウザのアドレスバーに[ http://②のアドレス:8080/ ]を入力

書籍で上記の説明は[ http://<DockerコンテナのIPアドレス>:8080/ ]を入力となっておりました。

これに対して、Dockerコンテナ内のシェルで[ hostname -i ]や[ ifconfigで出力されたdocker0のinet]のIPアドレスでサイトにアクセスしてみましたが同様の結果となりました。

Dockerfileは書籍側が用意しているものを使いましたが、Dockerの設定に不備があるのでしょうか。

補足情報(FW/ツールのバージョンなど)

OS
->MacOS

Browser
->Google Chrome Ver.89

Python
->3.6.9

FW(bottle)
->0.12.19

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

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

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

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

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

hentaiman

2021/03/27 15:15

もう一度書籍の手順見直してみてはどうでしょう 本当にそれしか書いてませんか?
t_obara

2021/03/27 16:39

dockerインスタンスを生成するコマンドを提示してください。
Majespy

2021/03/27 18:01

申し訳ございません。 Dockerインスタンスが何を指すのか理解できておりませんので、起動までの手順を回答させていただきます。 ①Dockerfile[ https://gitlab.com/pysec101/pysec101/raw/master/chap0/Dockerfile?inline=false ]をDL ②コマンド[ docker build . -t pysec101 ]をたたく ③起動スクリプト[ https://gitlab.com/pysec101/pysec101/raw/master/chap0/run_linux?inline=false ]をDL ④コマンド[ ./run_linux ]をたたく
guest

回答2

0

自己解決

書籍の方法でアクセスできなかったため、調べながらDockerfileを自作することで解決しました。

投稿2021/03/28 14:58

Majespy

総合スコア22

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

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

0

docker ps -a で現在何が出力されますか?

おそらくコンテナ起動時にポートフォワーディングがされていないことが原因かと思います。

docker run 時に -p 8080:8080 オプションを追加してみて下さい。

投稿2021/03/28 02:49

izuna385

総合スコア53

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

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

Majespy

2021/03/28 05:16

ご回答ありがとうございます。 >docker ps -a で現在何が出力されますか? コマンド[ python3 bottle_sample.py ]でスクリプトを実行し、 実行中に別ターミナルでコマンド[ docker ps -a ]を入力すると、以下の出力がありました。 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 686a880XXXXX pysec101:latest "/bin/bash" 3 minutes ago Up 3 minutes busy_torvalds f31d3ebXXXXX pysec101:latest "/bin/bash" 7 days ago Up 7 days practical_austin 0abc1e3XXXXX pysec101:latest "/bin/bash" 7 days ago Up 7 days frosty_jennings >docker run 時に -p 8080:8080 オプションを追加してみて下さい。 コマンド[ ./run_linux -p 8080:8080 ]でも同様の結果となりました。 ご確認よろしくお願いいたします。
izuna385

2021/03/28 05:22 編集

docker ps -a の一部を削除しましたか?ポートの情報が無いので、おそらくコピペ時に消していなければポートの設定が間違っています。 docker run -v $var:/home/pysec101 -u pysec101 -it --rm --net=host --privileged --cap-add=SYS_PTRACE --security-opt="seccomp=unconfined" pysec101:latest /bin/bash -p 8080:8080 と、docker run 部分にオプションを付けてみて下さい。
Majespy

2021/03/28 05:39

>docker ps -a の一部を削除しましたか?ポートの情報が無いので、おそらくコピペ時に消していなければポートの設定が間違っています。 上記の件ですが、出力文をそのまま回答いたしました。 > docker run -v $var:/home/pysec101 -u pysec101 -it --rm --net=host --privileged --cap-add=SYS_PTRACE --security-opt="seccomp=unconfined" pysec101:latest /bin/bash -p 8080:8080 コマンド[ vi run_linux ]から「-p 8080:8080」を末尾に追記し、 コマンド[ ./run_linux ]で起動しましたが下記のエラーが出力され上手く動作しませんでした。 /bin/bash: 8080:8080: No such file or directory ※コマンド[ ls /bin/bash ]でディレクトリがあることは確認いたしました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問