スタック全体を再起動せずに、スタックの一部である1つのサービスをdocker swarmで再起動する方法があるかどうか誰もが知っていますか?
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
フラグは、サービスを強制的に更新して再起動させます。
0にスケーリングしてバックアップします。
docker service scale myservice=0
docker service scale myservice=10
docker stack
ドキュメントを見ると:
拡張説明
SwarmのComposeまたはDabファイルからスタックを作成してupdate
このブログ記事 から:docker stack
はdocker compose
と同様の方法で機能します。それはidempotentです。スタックが既にデプロイされている場合、docker stack deploy
は、更新されたダイジェストまたはタグを持つサービスのみを再起動します。
私の経験から、1つのサービスを変更して同じスタックを再度デプロイすると、更新されたサービスのみが再起動されます。
BUT ...考慮される変更にはいくつかの制限があるようです(画像タグのあるレポート バグ )、試してみて、期待どおりに動作するかどうかを確認します。
また、変更で更新された場合にのみ対象のサービスであることを確認したい場合は、 service update
を使用することもできます。
この類似のSO QA も参照できます。