🦔

[Docker]Flaskのサーバーにローカル接続できないとき

2024/03/03に公開

はじめに

ネットワーク周りの理解が浅いなぁ…と実感しました

動作環境

  • Docker 24.0.7
  • Pythonイメージ python:3.9-slim
  • Flask 2.3.3

手順

以下のPythonコードを実行したいとき

from flask import Flask

app=Flask(__app__)

@app.route('/')
def hello():
	return ("<p>hello, world!<p>")

docker-compose.yml

version: '3'

services:
  server:
    build: app/
    ports:
      - "5000:5000"
    volumes:
      - ./app:/app

うまくいかない例

dockerfile

EXPOSE 5000
CMD flask run --port=5000

この場合、コンテナ内の5000番に、ホストマシンとは異なるマシンとしてサーバーが立っており、違うマシンからアクセスするとエラーを吐かれてしまう。

うまくいかせる

dockerfile

EXPOSE 5000
CMD flask run --port=5000 --host==0.0.0.0

--host==0.0.0.0オプションを付けることで、どのマシンからのアクセスでも許可するので、ローカルから参照できる

おまけ (おすすめオプション)

dockerfile

EXPOSE 5000
CMD flask run —port=5005 —host=0.0.0.0 —debugger --reload
  • --debugger: サーバー側でエラーとかのログを出してくれる
  • --reload: ホットリロードの有効化
GitHubで編集を提案

Discussion