前言
今天有開(kāi)發(fā)同學(xué)給我反饋說(shuō)有一個(gè)容器服務(wù)無(wú)法 stop、rm(docker rm -f)和 kill 等操作,也就是說(shuō)這個(gè)容器服務(wù)無(wú)法終止~
操作步驟
(1)執(zhí)行刪除命令無(wú)法刪除docker的目錄:
# ll /var/lib/docker/containers | grep caf8ef20f3c1
# cd /var/lib/docker/containers
# rm -rf caf8ef20f3c1c78f03a5844ee23abc1d7e44246f242292040f1ef288899d0cb8
這個(gè)時(shí)候我們會(huì)收到這樣的報(bào)錯(cuò):
rm: 無(wú)法刪除"/var/lib/docker/containers/caf8ef20f3c1c78f03a5844ee23abc1d7e44246f242292040f1ef288899d0cb8/secrets": 設(shè)備或資源忙
無(wú)法刪除"/var/lib/docker/containers/caf8ef20f3c1c78f03a5844ee23abc1d7e44246f242292040f1ef288899d0cb8/shm": 設(shè)備或資源忙
(2)從上面報(bào)錯(cuò)我們可以看到“secrets”和“shm”共享掛載導(dǎo)致無(wú)法刪除,首先找到掛載的位置,然后取消掛載后,再刪除:
# 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" //已經(jīng)沒(méi)有啦
(5)現(xiàn)在執(zhí)行刪除docker的目錄:
# cd /var/lib/docker/containers
# rm -rf caf8ef20f3c1c78f03a5844ee23abc1d7e44246f242292040f1ef288899d0cb8
(6)刪除容器服務(wù)
現(xiàn)在我們使用 rm 或 kill 來(lái)刪除 容器服務(wù):
# docker rm -f caf8ef20f3c1c
或
# docker kill --signal=SIGINT caf8ef20f3c1
如果上面命令運(yùn)行之后,出現(xiàn)hang住(卡住)現(xiàn)象,請(qǐng)重啟docker服務(wù):
# systemctl restart docker
做完以上步驟,所遇問(wèn)題基本就可以解決了~
補(bǔ)充:Docker容器無(wú)法被stop or kill問(wèn)題
問(wèn)題過(guò)程
某環(huán)境一個(gè)mysql容器無(wú)法被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 等命令處理后,容器立馬自動(dòng)重啟
立即查看容器,運(yùn)行時(shí)間為:Up Less than a second,說(shuō)明容器立馬啟動(dòng)了
7844250860f8 mysql:5.7.22 "/.r/r docker-entr..." 42 minutes ago Up Less than a second r-dlrel-mysql-1-66df8f33
kill該容器對(duì)應(yīng)的物理進(jìn)程,依然自動(dòng)重啟
獲取物理進(jìn)程方式:1.docker inspect中的 State.Pid字段為物理進(jìn)程ID; 2.ps 命令
查看容器restart policy,策略為no,即不會(huì)自動(dòng)重啟
如果需要更新運(yùn)行中容器的restart策略,可以使用該命令:docker update –restart=no my-container
"RestartPolicy": {
"Name": "no",
"MaximumRetryCount": 0
},
程序員之間神奇的問(wèn)題解決方式
你是否出現(xiàn)過(guò)這種場(chǎng)景:
百思不得其解的問(wèn)題,當(dāng)走到同事面前,剛把問(wèn)題說(shuō)清楚,自己就恍然大悟了。
問(wèn)題明明很簡(jiǎn)單,但程序運(yùn)行就是出問(wèn)題,然后找個(gè)同事幫忙檢查下基礎(chǔ)配置,自己又頓悟了。
這次我屬于第一種,剛把問(wèn)題說(shuō)完,立馬想起:擦,是容器編排工具Rancher在做調(diào)度,容器掛了之后會(huì)自動(dòng)重啟。
登錄rancher一看,果然如此,”烏龍”問(wèn)題。雖這次不是問(wèn)題,但Docker確實(shí)有無(wú)法stop的問(wèn)題,資料也很多。
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教。