0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

DockerでStreamlitを起動するポイント

Posted at

DockerでStreamlitを起動するポイント

この投稿では、Python 3.11 を使った Streamlit アプリを Docker および Docker Compose で起動する方法をまとめます。よくあるエラーとその対処法も解説しています。

1. Dockerfile の例

FROM python:3.11
USER root

COPY requirements.txt .
RUN python3.11 -m pip install -r requirements.txt

WORKDIR /app
COPY ./app/car_color_category.py .

CMD ["streamlit", "run", "car_color_category.py", "--server.port=8501", "--server.address=0.0.0.0"]

ポイント:

  • WORKDIR /app:コンテナ内の作業ディレクトリを /app に設定
  • CMD:コンテナ起動時に Streamlit アプリを CLI 経由で実行
  • --server.address=0.0.0.0:コンテナ外からブラウザでアクセス可能にする

CMD の各要素の解説

  • "streamlit":実行するプログラム名。Streamlit の CLI を呼び出す
  • "run":Streamlit にアプリを起動する指示を出すサブコマンド
  • "car_color_category.py":起動する Python スクリプト
  • "--server.port=8501":サーバーポートを指定(デフォルト 8501)
  • "--server.address=0.0.0.0":コンテナ外からのアクセスを許可

2. docker-compose.yml の例

services:
  python:
    build:
      context: .
      dockerfile: Dockerfile
    container_name: car_color_category_app
    volumes:
      - ./app:/app
      - ./dataset_split:/app/dataset_split
    stdin_open: true
    tty: true
    ports:
      - "8501:8501"
    command: streamlit run car_color_category.py --server.address=0.0.0.0 --server.port=8501

ポイント:

  • volumes:ローカルのファイルをコンテナにマウント。編集が即反映される
  • ./app:/app:アプリのソースコードをコンテナ内にマウント
  • ./dataset_split:/app/dataset_split:データセットを別ディレクトリにマウントし、コードとデータを分離
  • ports:ホストのポートとコンテナのポートを紐付け、ブラウザでアクセス可能にする
  • command:Dockerfile の CMD を上書きし、起動オプションを柔軟に設定可能

3. 起動手順

docker compose down  # 前のコンテナ停止
docker compose up --build

起動後、ブラウザで以下にアクセス:

http://localhost:8501

4. よくあるエラーと対処法

1. コンテナがすぐ終了する

症状:

  • docker compose up するとすぐに exited with code 0 となる

原因:

  • WORKDIR に合わせたファイルパスが間違っている
  • volumes でローカルのディレクトリがコンテナ内のファイルを上書きしている

対処:

  • docker-compose.yml の commandcar_color_category.py だけで指定
  • ローカルの ./app/car_color_category.py が存在するか確認
  • OneDrive 配下の場合、同期の影響でファイルが見えないことがあるので、通常フォルダに移動する

2. Python で直接実行してもアプリが起動しない

症状:

  • ENTRYPOINT ["python3.12", "index.py"] のようにしたが、コンテナがすぐ終了

原因:

  • Streamlit は CLI 経由で実行する必要がある
  • Python で直接実行するとサーバは起動せず、スクリプトが終了するだけ

対処:

  • CMD または docker-compose.yml の command で streamlit run index.py を指定

3. ホストからアクセスできない

原因:

  • --server.address=0.0.0.0 を指定していない
  • ports でホストとコンテナのポートが紐付いていない

対処:

  • CMD または command に --server.address=0.0.0.0 を追加
  • docker-compose.yml の ports を設定 "8501:8501"

4. No such file or directory (Trainフォルダが見つからない)

症状:

  • コンテナ内でdataset_split/trainが見つからないというエラーが発生する。

原因:

  • docker-compose.ymlでdataset_splitディレクトリがコンテナに正しくマウントされていない。

対処:

  • docker-compose.ymlのvolumesセクションに- ./dataset_split:/app/dataset_splitの行を追加してください。

まとめ

  • Streamlit は CLI で起動する必要がある
  • CMD はデフォルト起動コマンド、Compose の command で上書き可能
  • volumes と ports の設定でホットリロードとブラウザアクセスが可能
  • コンテナがすぐ終了する場合はファイルパスやボリュームを確認

これらを押さえれば、Docker + Streamlit で効率よく開発・デプロイできます。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?