docker服務(wù)假死的解決方法
問(wèn)題描述
在使用docker部署服務(wù)時(shí),偶爾會(huì)遇到docker服務(wù)假死的情況,使用的命令如下:
- docker ps 顯示容器狀態(tài)正常,但是對(duì)外服務(wù)已經(jīng)不可用不可訪問(wèn)
- docker stats 沒有任何反應(yīng)
- docker stop CONTAINER_ID 也沒有任何反應(yīng)
- docker restart CONTAINER_ID 也沒有任何反應(yīng)
- docker exec -it --user root CONTAINER_ID /bin/bash 也沒有任何反應(yīng)
- docker logs CONTAINER_ID --tail 111 -f 也沒有任何反應(yīng)
- docker-compose stop/down 命令也提示響應(yīng)超時(shí),不可用
問(wèn)題排查
之前沒有遇到過(guò)這種問(wèn)題,也是第一次,于是就各種信息都看一下,各種可能性也都考慮到位
猜測(cè)這種情況,可能是由于容器內(nèi)部的問(wèn)題導(dǎo)致服務(wù)無(wú)法正常運(yùn)行,或者Docker守護(hù)進(jìn)程本身出現(xiàn)了問(wèn)題。
- 查看容器內(nèi)部日志(我的容器日志也沒有問(wèn)題)
- 使用以下命令查看容器內(nèi)的stdout和stderr輸出,以獲取有關(guān)容器內(nèi)部問(wèn)題的更多信息。
docker logs CONTAINER_ID
- 使用-f選項(xiàng)可以實(shí)時(shí)跟蹤日志
docker logs -f CONTAINER_ID
- 檢查宿主機(jī)資源: 使用以下命令檢查宿主機(jī)的資源使用情況,確保資源(CPU、內(nèi)存)沒有被耗盡(我的沒有問(wèn)題)
docker stats
- 查看Docker守護(hù)進(jìn)程狀態(tài)(我的容器依然處于運(yùn)行狀態(tài))
- 檢查Docker守護(hù)進(jìn)程的運(yùn)行狀態(tài),確保它沒有出現(xiàn)問(wèn)題。
sudo systemctl status docker
- 如果守護(hù)進(jìn)程出現(xiàn)問(wèn)題,可以嘗試重啟Docker服務(wù)
sudo systemctl restart docker
- 手動(dòng)停止和啟動(dòng)容器: 嘗試手動(dòng)停止和啟動(dòng)容器,看是否能夠解決問(wèn)題。(我的問(wèn)題么有解決啊??)
docker stop CONTAINER_ID docker start CONTAINER_ID
- 檢查端口沖突: 確保容器所使用的端口沒有被其他進(jìn)程占用。(不可能,絕對(duì)不可能.jpg)
- 查看系統(tǒng)日志: 查看系統(tǒng)日志以獲取更多關(guān)于系統(tǒng)或Docker的問(wèn)題的信息。(說(shuō)實(shí)話么有看出來(lái)什么問(wèn)題)
dmesg | grep -i docker
- 查看網(wǎng)絡(luò)配置(正常的網(wǎng)絡(luò)狀況,網(wǎng)絡(luò)配置也沒有修改)
- 檢查Docker網(wǎng)絡(luò)配置,確保網(wǎng)絡(luò)正常。
docker network ls
- 查看容器的網(wǎng)絡(luò)配置
docker inspect CONTAINER_ID | grep NetworkMode
查看防火墻設(shè)置: 如果使用防火墻,確保容器所需的端口沒有被阻塞。
嘗試重啟Docker服務(wù): 如果以上方法都沒有解決問(wèn)題,可以嘗試重啟整個(gè)Docker服務(wù)。(終極大招,管用?。?/p>
sudo systemctl restart docker
問(wèn)題解決
終極殺招-最粗暴的解決方法
- 重啟docker(慎用):
sudo systemctl restart docker
要注意,這個(gè)操作會(huì)把所有的docker服務(wù)無(wú)差別的重啟,慎用
手動(dòng)清理假死的docker服務(wù)
- 找到假死的docker服務(wù):執(zhí)行
docker ps
命令找到容器ID【CONTAINER_ID】 - 先嘗試使用docker自帶的命令停止容器:
docker stop 【CONTAINER_ID】
發(fā)現(xiàn)停不掉 - 手動(dòng)查找docker目錄下的容器信息
- docker默認(rèn)目錄:/var/lib/docker
- 所有docker容器的信息都掛載在/var/lib/docker/containers目錄下
- 通過(guò)【CONTAINER_ID】找到該假死服務(wù)的目錄
ll /var/lib/docker/containers | grep 【CONTAINER_ID】
cd /var/lib/docker/containers
- 刪除該容器
rm -rf 目錄名
這里刪除可能會(huì)報(bào)下面的錯(cuò)誤,因?yàn)槟愕娜萜鬟€掛載了其他目錄,信息如下: rm:無(wú)法刪除"/var/lib/docker/containers/目錄名/secrets":設(shè)備或資源忙無(wú)法刪除"/var/lib/docker/containers/目錄名/shm": 設(shè)備或資源忙
這個(gè)時(shí)候查一下容器對(duì)應(yīng)的掛載目錄
cat /proc/mounts |grep "docker" |grep "【CONTAINER_ID】"
然后先取消掛載
umount /data/sys/var/docker/containers/掛載目錄/secretsumount /data/sys/var/docker/containers/掛載目錄/shm
如果這一步 unmout 不了,可以嘗試找到使用該目錄的進(jìn)程
lsof |grep "掛載目錄"
如果有相關(guān)進(jìn)程,記錄相關(guān)的進(jìn)程號(hào)直接 kill -9 進(jìn)程號(hào)
ll /var/lib/docker/containers | grep 【CONTAINER_ID】
這個(gè)時(shí)候再重新執(zhí)行刪除目錄命令
cd /var/lib/docker/containers
rm -rf 目錄名
這個(gè)時(shí)候就可以刪掉了
- 再次嘗試通過(guò)docker的命令停止容器
docker stop 【CONTAINER_ID】
或
docker rm -f 【CONTAINER_ID】或docker kill --signal=SIGINT 【CONTAINER_ID】
如果還是無(wú)法停掉改服務(wù),可以按如下步驟:
使用linux進(jìn)程管理命令來(lái)結(jié)束容器進(jìn)程
先找到該進(jìn)程:
ps -ef | grep【CONTAINER_ID】
強(qiáng)制殺掉篩選出來(lái)的進(jìn)程信息:
kill -9 PID
- 再次檢查docker服務(wù)狀態(tài)
docker ps
先可以看到該服務(wù)已經(jīng)被干掉了。
如果說(shuō)按照這個(gè)操作依然無(wú)法解決docker假死問(wèn)題,那么我還是建議大家采用上面最粗暴的方式去解決,但是要注意,這個(gè)操作會(huì)把所有的docker服務(wù)無(wú)差別的重啟。
以上就是docker服務(wù)假死的解決方法的詳細(xì)內(nèi)容,更多關(guān)于docker服務(wù)假死的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
docker中通過(guò)nginx+confd動(dòng)態(tài)生成配置的解決方案
這篇文章主要介紹了docker:nginx+confd動(dòng)態(tài)生成配置,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-03-03dockerfile結(jié)合go應(yīng)用程序的簡(jiǎn)單應(yīng)用代碼示例
Dockerfile文件是一個(gè)包含了指令和參數(shù)的文本文件,用于自動(dòng)化構(gòu)建Docker鏡像,這篇文章主要給大家介紹了關(guān)于dockerfile結(jié)合go應(yīng)用程序的簡(jiǎn)單應(yīng)用,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-03-03通過(guò)Dockerfile構(gòu)建Docker鏡像的方法步驟
這篇文章主要介紹了通過(guò)Dockerfile構(gòu)建Docker鏡像的方法步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-02-02詳解Docker 容器跨主機(jī)多網(wǎng)段通信解決方案
這篇文章主要介紹了Docker 容器跨主機(jī)多網(wǎng)段通信解決方案,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-08-08docker kubernetes dashboard安裝部署詳細(xì)介紹
這篇文章主要介紹了docker kubernetes dashboard安裝部署詳細(xì)介紹的相關(guān)資料,需要的朋友可以參考下2016-10-10關(guān)于docker?cgroups資源限制的問(wèn)題
cgroups是一個(gè)非常強(qiáng)大的linux內(nèi)核工具,他不僅可以限制被namespace隔離起來(lái)的資源,還可以為資源設(shè)置權(quán)重、計(jì)算使用量,這篇文章主要介紹了docker?cgroups資源限制,需要的朋友可以參考下2022-09-09Docker 通過(guò)端口來(lái)連接一個(gè)容器的實(shí)現(xiàn)
這篇文章主要介紹了Docker 通過(guò)端口來(lái)連接一個(gè)容器的實(shí)現(xiàn),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-11-11