発端
ノードを再起動した後にsacleしようとしたところ、次のようなエラーが出ました。
Error response from daemon: service endpoint with name es already exists
古いコンテナを削除してもこのエラーが出る場合は、docker networkにコンテナの登録が残ってしまっている可能性が高いので、次のコマンドで削除できます。
docker network disconnect -f [ネットワーク名] [コンテナ名]
一応気になったので、実際に登録されているか調べてみました。
$ docker network inspect [network_name] | grep -n [container_name]
154 "Name": "[container_name]",
$ docker network inspect www_default | head -n 160 | tail -n 20
(略)
"[ID]": {
"Name": "[container_name]",
"EndpointID": "~~~",
"MacAddress": "~~~",
"IPv4Address": "~~~",
"IPv6Address": ""
}
(略)
上のコンテナは既にdocker rmで削除していますので、networkにゾンビのように残ってしまっていることがわかります。
あとheadとかtail使わなくてもjqとかdocker network –formatとかで綺麗に見られると思います。。
追記(2017/03/30)
swarmでノードを強制的に落とした時に同様のエラーが出ましたが、上記方法では解決しませんでした。
このような場合、落としたノードをクラスタに復帰させてからコンテナを削除する必要があるようです・・・