web-dev-qa-db-ja.com

Dockerコンテナが自動的にクラッシュしたときに再起動する

コンテナが自動的にクラッシュした場合に再起動したい。これをどうやってやるのかわかりません。 Elasticsearch、redis、nats、mongoを含むスクリプトdocker-compose-deps.ymlがあります。ターミナルでこれを実行して、これを設定します:docker-compose -f docker-compose-deps.yml up -d。この後、docker-compose up -dを実行してコンテナを設定しました。これらのコンテナがクラッシュした場合に再起動する方法はありますか? dockerには再起動機能が組み込まれていることに気付きましたが、これを実装する方法がわかりません。

いくつかのフィードバックの後、restart: alwaysファイルとdocker-composeファイルにdocker-compose-deps.ymlを追加しました。これは正しいように見えますか?それとも、これは常に再起動を実装する方法ですか?

docker-composeサンプル

myproject-server:
  build: "../myproject-server"
  dockerfile: Dockerfile-dev
  restart: always
  ports:
  - 5880:5880
  - 6971:6971
  volumes:
  - "../myproject-server/src:/src"
  working_dir: "/src"
  external_links:
  - nats
  - mongo
 - elasticsearch
 - redis
myproject-associate:
  build: "../myproject-associate"
  dockerfile: Dockerfile-dev
  restart: always
  ports:
  - 5870:5870
  volumes:
  - "../myproject-associate/src:/src"
  working_dir: "/src"
  external_links:
  - nats
  - mongo
  - elasticsearch
  - redis

docker-compose-deps.ymlサンプル

nats:
  image: nats
  container_name: nats
  restart: always
  ports:
  - 4222:4222
mongo:
  image: mongo
  container_name: mongo
  restart: always
  volumes:
  - "./data:/data"
  ports:
  - 27017:27017
9
daveskylark

作成を使用している場合は、docker runコマンドに存在するものと同様の再起動フラグがあるため、これを使用できます。この部分に関するドキュメントへのリンクは次のとおりです https://docs.docker.com/compose/compose-file/

展開するときは、展開先によって異なります。 kubernetes、mesos、ECSなどのほとんどのコンテナークラスターには、コンテナーの自動再起動に使用できる構成がいくつかあります。これらのツールを使用しない場合は、コンテナを手動で起動している可能性があり、ローカルで使用する場合と同じように再起動フラグを使用できます。

8
Yaron Idan

は、私にはよく見えますよ。 Dockerポリシーで作業するときに理解したいのは、それぞれの意味です。 alwaysポリシーは、何らかの理由でクラッシュした場合、自動的に再起動することを意味します。

したがって、何らかの理由で停止した場合は、先に進んで再起動してください。

では、なぜon-failureではなくalwaysを使用したいのでしょうか。

場合によっては、Webサーバーなど、常に実行していることを確認したいコンテナーがある場合があります。パブリックWebアプリケーションを実行している場合は、そのサーバーを100%使用できるようにする必要があります。

したがって、Webアプリケーションの場合は、alwaysを使用することを期待しています。一方、ファイルに対してワーカープロセスを実行していて、自然に終了する場合は、on-failureポリシーの適切な使用例になります。これは、ワーカーコンテナーがファイルの処理を終了している可能性があり、おそらく閉じて、再起動しないようにします。

それは私がon-failureポリシーを使用することを期待するところです。したがって、構文を知っているだけでなく、いつどのポリシーを適用し、それぞれが何を意味するかを知っています。

2
Daniel