web-dev-qa-db-ja.com

Docker Swarm Stackの1つのサービスを再起動します

スタック全体を再起動せずに、スタックの一部である1つのサービスをdocker swarmで再起動する方法があるかどうか誰もが知っていますか?

50
tweeks200

docker stack deployを再度行うことは、サービスを更新する方法です。 Francois 'Answer として、また私自身の経験からすると、そうすることで更新が必要なサービスのみが更新されます。

しかし、場合によっては、ものをテストするときに単一のサービスのみを再起動する方が簡単なようです。私の場合、ボリュームをクリアし、サービスを更新して、新鮮な状態で開始する必要がありました。説明する方法に欠点があるかどうかはわかりません。私は自分の開発スタックでそれをテストしましたが、私にとってはうまくいきました。

分解するサービスIDを取得し、docker service update --force <id>を使用して、サービスを強制的に更新し、サービスを効果的に再デプロイします

$ docker stack services <stack_name>
ID                  NAME              ...
3xrdy2c7pfm3        stack-name_api    ...

$ docker service update --force 3xrdy2c7pfm3

--forceフラグは、サービスを強制的に更新して再起動させます。

63
Matt

0にスケーリングしてバックアップします。

docker service scale myservice=0
docker service scale myservice=10
42
Luke W

docker stack ドキュメントを見ると:

拡張説明

SwarmのComposeまたはDabファイルからスタックを作成してupdate

このブログ記事 から:docker stackdocker composeと同様の方法で機能します。それはidempotentです。スタックが既にデプロイされている場合、docker stack deployは、更新されたダイジェストまたはタグを持つサービスのみを再起動します。

docker stack process

私の経験から、1つのサービスを変更して同じスタックを再度デプロイすると、更新されたサービスのみが再起動されます

BUT ...考慮される変更にはいくつかの制限があるようです(画像タグのあるレポート バグ )、試してみて、期待どおりに動作するかどうかを確認します。

また、変更で更新された場合にのみ対象のサービスであることを確認したい場合は、 service update を使用することもできます。

この類似のSO QA も参照できます。

9