Streamlit をコンテナ越しで serve する

Streamlit をコンテナ内で動かし、ホスト/ngrok 経由で触るときの定番フラグと段取り。

  • 起動フラグ:
    • --server.port 8501(ポート固定)
    • --server.headless true(サーバー文脈なのでブラウザ自動起動を抑止)
    • --server.enableCORS false / --server.enableXsrfProtection false (ngrok やポートフォワード越しのアクセスでブロックされないように)
  • ポート競合を先に潰す:再起動前に pkill -f streamlit || true(古いプロセスが 8501 を掴んだまま だと起動に失敗する)。
  • devコンテナで自動化:devcontainer.json の forwardPorts: [8501, 8502] でホストに転送し、 postAttachCommand の nohup streamlit run ... & でアタッチ時に自動起動(手動起動すら不要にできる)。
  • 外から触らせるなら → ngrokで外部公開。ホストから起こすなら → Windowsホストからコンテナのアプリを起動する。

出典:gemini-rag(start.sh)、task-launcher、.devcontainer/devcontainer.json