複数のコマンドを順番に実行できるこのようなことをしたいと思います。
db:
image: postgres
web:
build: .
command: python manage.py migrate
command: python manage.py runserver 0.0.0.0:8000
volumes:
- .:/code
ports:
- "8000:8000"
links:
- db
複数のコマンドを順番に実行できるこのようなことをしたいと思います。
db:
image: postgres
web:
build: .
command: python manage.py migrate
command: python manage.py runserver 0.0.0.0:8000
volumes:
- .:/code
ports:
- "8000:8000"
links:
- db
それを考え出した、使用しますbash -c
。
例:
command: bash -c "python manage.py migrate && python manage.py runserver 0.0.0.0:8000"
複数行の同じ例:
command: >
bash -c "python manage.py migrate
&& python manage.py runserver 0.0.0.0:8000"
または:
command: bash -c "
python manage.py migrate
&& python manage.py runserver 0.0.0.0:8000
"
次のように、移行などの起動前のものを別の一時的なコンテナーで実行します (構成ファイルはバージョン '2' タイプである必要があることに注意してください)。
db:
image: postgres
web:
image: app
command: python manage.py runserver 0.0.0.0:8000
volumes:
- .:/code
ports:
- "8000:8000"
links:
- db
depends_on:
- migration
migration:
build: .
image: app
command: python manage.py migrate
volumes:
- .:/code
links:
- db
depends_on:
- db
これは、物事を清潔に保ち、分離するのに役立ちます。考慮すべき 2 つの点:
(depends_on を使用して) 正しい起動シーケンスを確保する必要があります。
build と image を使用して最初にタグ付けすることで達成される複数のビルドを避けたい。その後、他のコンテナの画像を参照できます。
複数のデーモン プロセスを実行する必要がある場合、Docker のドキュメントには、すべてのサブデーモンが標準出力に出力されるように、Supervisord を切り離されていないモードで使用するという提案があります。
別の SO の質問から、子プロセスの出力を標準出力にリダイレクトできることを発見しました。 そうすれば、すべての出力を見ることができます!
wait-for-it やdockerizeなどのツールを使用します。これらは、アプリケーションのイメージに含めることができる小さなラッパー スクリプトです。または、独自のラッパー スクリプトを記述して、よりアプリケーション固有のコマンドを実行します。によると:https://docs.docker.com/compose/startup-order/
「;」を使用してみてください バージョン 2 を使用している場合は、コマンドを分離します。
command: "sleep 20; echo 'a'"