DockerSwarmサービスがあるとしましょうmyservice1
およびmyservice2
。これらのサービスを削除して、関連するコンテナーが停止するのを待つにはどうすればよいですか?
停止して単一のサービスを待つには:
$ docker service rm myservice1 && docker wait $(docker ps -f "name=myservice1" -q)
複数のサービスの場合:
$ docker service rm myservice1 myservice2 && docker wait $(docker ps -f "name=myservice1" -f "name=myservice2" -q)
残念ながら、/ u/redgeoffの回答についてコメントするには、さらに担当者が必要です...しかし、docker wait
は、コマンドが実行されるノードに対してローカルなコンテナ/タスクで動作します。マルチノードスウォーム(docker swarmを使用するポイントの一種)では、現在のノードがサービスタスクの実行場所であるとは限りません。
このようなものはより良いはずです:
$ docker service ps --format '{{.Node}}' serviceName
# node1.swarm.internal
$ ssh [email protected]
$ docker service rm myservice1 && docker wait $(docker ps -f "name=serviceName" -q)
ただし、このalsoは、タスクが実行されているノードがマネージャーノードであると想定しています。そうでない場合、docker service
コマンドは実行できません。その場合、タスクが存在する場所にSSH接続する前に、docker service rm
コマンドを実行する必要があります。