Pythonのbottleで作ったものをコンテナで立ち上げるとアクセスできなかった件

Pythonのbottleで、

各種処理を作っており、

今までの環境では、

Nginxをベースに、

サーバー上で直接起動させていた。

環境整備の一環で、

Dockerを使うようになって、

既存アプケーションを、

コンテナに移していく中で、

このbottleで作ったアプリケーションに、

なぜかうまくアクセスできない事象が発生。

この事象について、

個人的な備忘録のために、

この記事に残しておく。

既存アプリケーションの立ち上げ方

ルーティングなどを、

route.py

として作っており、

python3 route.py

で立ち上げるようにしていた。

こんな感じ。

from bottle import Bottle, request, response, route, run, template
 :
if __name__ == '__main__':
    from optparse import OptionParser
    parser = OptionParser()
    parser.add_option("--host", dest="host", default="localhost",
                      help="hostname or ip address", metavar="host")
    parser.add_option("--port", dest="port", default=8080,
                      help="port number", metavar="port")
    (options, args) = parser.parse_args()
    run(app, host=options.host, port=int(options.port))

コンテナに移して起きた事象

コンテナを立ち上げ、

ポートフォワードは、

0.0.0.0:8080->8080/tcp

このようになるように設定している。

コンテナで8080はすでに立ち上げている。

この時に、アクセス状況としては、

以下のようになった。

コンテナ内からのアクセス

コンテナ内で、

curl -l http://localhost:8080

でアクセスを確認すると、

問題なくアクセスできました。

コンテナ外(ホスト)からのアクセス

コンテナ外(ホスト)で、

curl -l http://localhost:8080

でアクセスを確認すると、

curl: (52) Empty reply from server

とレスポンスが空になり、

コンテナ内でアクセスきているのか、

ログを確認してみても、

アクセスされていませんでした。

設定ミスを調整

上記以外にも、シンプルなアプリケーションで、

コンテナ立ち上げ、ポートフォワードのアクセス確認をしたところ、

bottleアプリケーションでブロックしている可能性が高い

という状況判断しました。

この判断して詳しく調べていくと、

from bottle import Bottle, request, response, route, run, template
 :
if __name__ == '__main__':
    from optparse import OptionParser
    parser = OptionParser()
    parser.add_option("--host", dest="host", default="localhost",
                      help="hostname or ip address", metavar="host")
    parser.add_option("--port", dest="port", default=8080,
                      help="port number", metavar="port")
    (options, args) = parser.parse_args()
    run(app, host=options.host, port=int(options.port))

このコードの中で、

parser.add_option("--host", dest="host", default="localhost",

となっていますが、

これが、

localhost

となっているので、

コンテナ内からのみアクセスが可能になっていました。

そのため、

この部分を、

0.0.0.0

に変更します。

parser.add_option("--host", dest="host", default="0.0.0.0",

このように調整して、

アプリケーションを立ち上げ直すことで、

うまくホスト側からでもアクセスできました。

シンプルな事象ですが、

今後のためにもメモしておきます。

スキルを使って、就職/転職/副業する時のサイト

プログラミングのスキルなどを、自分なりに高めた上で、

自分のスキルをアピールして就職や転職を行い、年収をあげるか、

副業という形で、年収にプラスアルファの稼ぎを増やすことはできます。

まずはできる範囲で取り組むことで、

少しずつ、経験値も増え、自分のスキルが収入につながるのでおすすめです。

おすすめ書籍

広告

おすすめ記事