コンテナが自動的にクラッシュした場合に再起動したい。これをどうやってやるのかわかりません。 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
作成を使用している場合は、docker runコマンドに存在するものと同様の再起動フラグがあるため、これを使用できます。この部分に関するドキュメントへのリンクは次のとおりです https://docs.docker.com/compose/compose-file/
展開するときは、展開先によって異なります。 kubernetes、mesos、ECSなどのほとんどのコンテナークラスターには、コンテナーの自動再起動に使用できる構成がいくつかあります。これらのツールを使用しない場合は、コンテナを手動で起動している可能性があり、ローカルで使用する場合と同じように再起動フラグを使用できます。
は、私にはよく見えますよ。 Dockerポリシーで作業するときに理解したいのは、それぞれの意味です。 always
ポリシーは、何らかの理由でクラッシュした場合、自動的に再起動することを意味します。
したがって、何らかの理由で停止した場合は、先に進んで再起動してください。
では、なぜon-failure
ではなくalways
を使用したいのでしょうか。
場合によっては、Webサーバーなど、常に実行していることを確認したいコンテナーがある場合があります。パブリックWebアプリケーションを実行している場合は、そのサーバーを100%使用できるようにする必要があります。
したがって、Webアプリケーションの場合は、always
を使用することを期待しています。一方、ファイルに対してワーカープロセスを実行していて、自然に終了する場合は、on-failure
ポリシーの適切な使用例になります。これは、ワーカーコンテナーがファイルの処理を終了している可能性があり、おそらく閉じて、再起動しないようにします。
それは私がon-failure
ポリシーを使用することを期待するところです。したがって、構文を知っているだけでなく、いつどのポリシーを適用し、それぞれが何を意味するかを知っています。