776

複数のコマンドを順番に実行できるこのようなことをしたいと思います。

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
4

19 に答える 19

1217

それを考え出した、使用します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
  "
于 2015-05-05T22:16:53.983 に答える
209

次のように、移行などの起動前のものを別の一時的なコンテナーで実行します (構成ファイルはバージョン '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 つの点:

  1. (depends_on を使用して) 正しい起動シーケンスを確保する必要があります。

  2. build と image を使用して最初にタグ付けすることで達成される複数のビルドを避けたい。その後、他のコンテナの画像を参照できます。

于 2016-03-09T15:01:48.173 に答える
5

複数のデーモン プロセスを実行する必要がある場合、Docker のドキュメントには、すべてのサブデーモンが標準出力に出力されるように、Supervisord を切り離されていないモードで使用するという提案があります。

別の SO の質問から、子プロセスの出力を標準出力にリダイレクトできることを発見しました。 そうすれば、すべての出力を見ることができます!

于 2016-04-27T14:08:21.167 に答える
2

wait-for-it やdockerizeなどのツールを使用します。これらは、アプリケーションのイメージに含めることができる小さなラッパー スクリプトです。または、独自のラッパー スクリプトを記述して、よりアプリケーション固有のコマンドを実行します。によると:https://docs.docker.com/compose/startup-order/

于 2016-07-11T11:46:55.413 に答える
-9

「;」を使用してみてください バージョン 2 を使用している場合は、コマンドを分離します。

command: "sleep 20; echo 'a'"

于 2017-01-13T00:11:06.180 に答える