使用 Docker 服務運行應用工程時,在代碼更新過程中,會涉及到容器的刪除和重新創建的過程。在操作過程中,發現 docker 服務無法正常刪除掉;以下記錄排錯和操作過程。
一、處理步驟1:刪除容器,重新創建
1、刪除容器
docker stop mysql
docker rm mysql
沒有提示錯誤消息;但是在message日誌文件中,提示“container kill failed because of 'container not found' or 'no such process”
。再次使用docker ps 命令檢查,發現 mysql 工程容器還是存在。
2、強制刪除容器
docker rm -f 73cfe6fcb8aa
3、重新創建容器(失敗報錯 )
docker run -d --name=mysql mysql
報錯消息:/usr/bin/docker-current: Error response from daemon: service endpoint with name mysql already exists
。
二、處理步驟2:刪除Endpoint,新建容器
Endpoint 可以理解爲虛擬網卡,是成對存在的;一端連接在容器內部的網絡沙盒,一端連接docker 服務的網絡驅動模式(可以理解爲虛擬交換機)。
1、首先我們要確定當前主機中有幾種交換機。
docker network ls
2、確定 Endpoint 是創建在哪個交換機上
docker network inspect host(network_name) |grep "container_name"
3、斷開網絡交換機和容器的連接
docker network disconnect --force host(network_name) mysql(container_name)
4、重新創建容器(成功)
docker run -d --name=mysql mysql
三、原因分析
在 Github 上找到了一些關於這個問題的說明,這個問題應該是 Docker服務的一個bug;可以重啓一下 Docker 服務暫時解決。
如果要徹底解決請將 Docker 服務的版本升級到1.18以上。