発生した現象
docker-compose up -d
で起動したコンテナ群を停止しようとしたとき、docker-compose stop
とし、docker-compose ps
で停止を確認したところ、
Name Command State Ports
--------------------------------------------------------------------------------
test_apache-php_1 apache2-foreground Up 0.0.0.0:80->80/tcp
test_mysql_1 docker-entrypoint.sh mysqld Up 3306/tcp
test_phpmyadmin_1 /run.sh Up 0.0.0.0:8080->8080/tcp
なぜか起動したまま。
docker-compose kill
とか、
docker stop $(docker ps -a -q)
docker rm $(docker ps -a -q)
で、全コンテナ削除を試みるも、
Error response from daemon: You cannot remove a running container 6456e178b6b19a51592d92eb4c8a266f03718a21bc80674731ea23da331fa331. Stop the container before attempting removal or force remove
Error response from daemon: You cannot remove a running container 5c0985c779d9653597cf16804c4d8234691019ca6d277d668234c4e47b14880e. Stop the container before attempting removal or force remove
Error response from daemon: You cannot remove a running container 1710ee4fb30e9c5df3193dd37c3aa66bccbdd56ec9fcba2d7e6449a00b84d90c. Stop the container before attempting removal or force remove
というエラーが表示される。
対処法
force remove
とか表示されているため、強制削除すればいいのかなと思い、docker ps
でコンテナIDを調べ、
docker rm --force <コンテナID>
を、起動しているコンテナ分実行。
docker ps
でコンテナの状態を確認すると、
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
で、全部削除された。
新たな問題
しかし、全部削除されたところで再びdocker-compose up -d
でコンテナ群を起動しようとしたところコンテナ起動の途中で、
Creating test_mysql_1
ERROR: endpoint with name test_mysql_1 already exists in network bridge
となりdocker-compose up -d
が中断する。
対処法
エラーメッセージの通りに、ネットワークについて調べる。
docker network inspect bridge
としたところ、
"Containers": {
"1710ee4fb30e9c5df3193dd37c3aa66bccbdd56ec9fcba2d7e6449a00b84d90c": {
"Name": "test_mysql_1",
"EndpointID": "aed78298261a7179a8e9d7af26a242640b7789b7285f38c2b0ec58147ebbb4e2",
"MacAddress": "02:42:ac:11:00:02",
"IPv4Address": "172.17.0.2/16",
"IPv6Address": ""
},
"5c0985c779d9653597cf16804c4d8234691019ca6d277d668234c4e47b14880e": {
"Name": "test_apache-php_1",
"EndpointID": "4820bbc930e44e3855e4dc9dcc94d86b3dbd8d75d89814e2e8671e8cf35d6c71",
"MacAddress": "02:42:ac:11:00:03",
"IPv4Address": "172.17.0.3/16",
"IPv6Address": ""
},
"6456e178b6b19a51592d92eb4c8a266f03718a21bc80674731ea23da331fa331": {
"Name": "test_phpmyadmin_1",
"EndpointID": "d3f48e94593024dde9220d06a1bc3c0a9cdafedeab9438340e0077984a5cc36c",
"MacAddress": "02:42:ac:11:00:04",
"IPv4Address": "172.17.0.4/16",
"IPv6Address": ""
}
},
これらが残っていたため、新しく同じ名前のコンテナが起動できなかったのかな。
docker network disconnect -f <ネットワーク名> <コンテナ名>
のようにすればよいので、今回だと、
docker network disconnect -f bridge test_mysql_1
docker network disconnect -f bridge test_apache-php_1
docker network disconnect -f bridge test_phpmyadmin_1
とする。
docker-compose up -d
とすると、うまくコンテナ群が起動してくれました。
追記
@gc373 様のコメントを参考に、
sudo service docker restart
としたところ、コンテナが停止し、再びdocker-compose up -d
としてもうまくコンテナが起動しました。
所感
今までdocker-compose up -d
で起動したコンテナはdocker-compose stop
やdocker-compose rm
で普通に停止や削除ができていたのに、なぜ急にできなくなってしまったのだろう…