Docker 無法停止或刪除容器服務問題的解決方案

前言

今天有開發同學給我反饋說有一個容器服務無法 stop、rm(docker rm -f)和 kill 等操作,也就是說這個容器服務無法終止~

操作步驟

(1)執行刪除命令無法刪除docker的目錄:

# ll /var/lib/docker/containers | grep caf8ef20f3c1
# cd /var/lib/docker/containers 
# rm -rf caf8ef20f3c1c78f03a5844ee23abc1d7e44246f242292040f1ef288899d0cb8

這個時候我們會收到這樣的報錯:

rm: 無法刪除”/var/lib/docker/containers/caf8ef20f3c1c78f03a5844ee23abc1d7e44246f242292040f1ef288899d0cb8/secrets”: 設備或資源忙

無法刪除”/var/lib/docker/containers/caf8ef20f3c1c78f03a5844ee23abc1d7e44246f242292040f1ef288899d0cb8/shm”: 設備或資源忙

(2)從上面報錯我們可以看到“secrets”和“shm”共享掛載導致無法刪除,首先找到掛載的位置,然後取消掛載後,再刪除:

# cat /proc/mounts |grep "docker" |grep "caf8ef20f3c1"

(3)取消掛載:

# umount /data/sys/var/docker/containers/caf8ef20f3c1c78f03a5844ee23abc1d7e44246f242292040f1ef288899d0cb8/secrets
# umount /data/sys/var/docker/containers/caf8ef20f3c1c78f03a5844ee23abc1d7e44246f242292040f1ef288899d0cb8/shm

(4)再次查看:

# cat /proc/mounts |grep "docker" |grep "caf8ef20f3c1" //已經沒有啦

(5)現在執行刪除docker的目錄:

# cd /var/lib/docker/containers 
# rm -rf caf8ef20f3c1c78f03a5844ee23abc1d7e44246f242292040f1ef288899d0cb8

(6)刪除容器服務

現在我們使用 rm 或 kill 來刪除 容器服務:

# docker rm -f caf8ef20f3c1c

# docker kill --signal=SIGINT caf8ef20f3c1

如果上面命令運行之後,出現hang住(卡住)現象,請重啟docker服務:

# systemctl restart docker

做完以上步驟,所遇問題基本就可以解決瞭~

補充:Docker容器無法被stop or kill問題

問題過程

某環境一個mysql容器無法被stop or kill or rm

sudo docker ps | grep mysql 查看該容器

7844250860f8 mysql:5.7.22  "/.r/r docker-entr..."  41 minutes ago  Up 8 minutes  r-dlrel-mysql-1-66df8f33

使用docker stop / docker kill / docker rm -f 等命令處理後,容器立馬自動重啟

立即查看容器,運行時間為:Up Less than a second,說明容器立馬啟動瞭

7844250860f8 mysql:5.7.22  "/.r/r docker-entr..."  42 minutes ago Up Less than a second  r-dlrel-mysql-1-66df8f33

kill該容器對應的物理進程,依然自動重啟

獲取物理進程方式:1.docker inspect中的 State.Pid字段為物理進程ID; 2.ps 命令

查看容器restart policy,策略為no,即不會自動重啟

如果需要更新運行中容器的restart策略,可以使用該命令:docker update –restart=no my-container

"RestartPolicy": {
  "Name": "no",
  "MaximumRetryCount": 0
},

程序員之間神奇的問題解決方式

你是否出現過這種場景:

百思不得其解的問題,當走到同事面前,剛把問題說清楚,自己就恍然大悟瞭。

問題明明很簡單,但程序運行就是出問題,然後找個同事幫忙檢查下基礎配置,自己又頓悟瞭。

這次我屬於第一種,剛把問題說完,立馬想起:擦,是容器編排工具Rancher在做調度,容器掛瞭之後會自動重啟。

登錄rancher一看,果然如此,”烏龍”問題。雖這次不是問題,但Docker確實有無法stop的問題,資料也很多。

以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。如有錯誤或未考慮完全的地方,望不吝賜教。