Docker容器無(wú)法被stop or kill問(wèn)題的解決方法
Docker version 1.13.1
問(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)題,資料也很多。
拓展閱讀: Docker Restart Policy
解決過(guò)程中了解了很多Docker Restart Policy知識(shí)和Bug,這篇文章寫(xiě)的簡(jiǎn)單易懂:Ensuring Containers Are Always Running with Docker's Restart Policy
這里僅做下記錄,學(xué)習(xí)下Docker的四種Restart Policy。
no
no是默認(rèn)策略,在任何情況下都不會(huì)restart容器
on-failure
on-failure表示如果容器 exit code異常時(shí)將restart,如果容器exit code正常將不做任何處理。
sudo docker run -d --name testing_restarts --restart on-failure:5 testing_restarts 85ff2f096bac9965a9b8cffbb73c1642bf7b64a2173bbd145961231861b95819
on-failure[:max-retries],max-retries表示最大重啟次數(shù)。
on-failure的好處是:如果容器以正常exit code終止,將不會(huì) restart
always
無(wú)論容器exit code是什么,都會(huì)自動(dòng)restart。列舉幾個(gè)場(chǎng)景:
- 容器以非正常狀態(tài)碼終止(如應(yīng)用內(nèi)存不足導(dǎo)致終止)
- 容器被正常 stopped,然后機(jī)器重啟或Docker服務(wù)重啟
- 容器在宕機(jī)在正常運(yùn)行,然后重啟機(jī)器或Docker服務(wù)重啟
以上情況always側(cè)露都會(huì)restart容器,但是如果是 on-failure和no策略,機(jī)器被重啟之后容器將無(wú)法restart。
unless-stopped
unless-stopped 和 always 基本一樣,只有一個(gè)場(chǎng)景 unless-stopped有點(diǎn)特殊:
如果容器正常stopped,然后機(jī)器重啟或docker服務(wù)重啟,這種情況下容器將不會(huì)被restart
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Docker stop停止/remove刪除所有容器
- docker容器無(wú)法stop的解決辦法
- 解決docker啟動(dòng)容器失敗:cannot?access‘/docker-entrypoint-initdb.d/‘:Operation?not?permitted
- pycharm遠(yuǎn)程連接docker容器的操作流程
- pycharm使用docker容器開(kāi)發(fā)的詳細(xì)教程
- docker swarm如何在指定的node上運(yùn)行指定的容器
- 在Ubuntu 16.04上用Docker Swarm和DigitalOcean創(chuàng)建一個(gè)Docker容器集群的方法
- Docker無(wú)法stop或者rm指定容器問(wèn)題解決方案
相關(guān)文章
記一次Docker生產(chǎn)環(huán)境搭建的方法
這篇文章主要介紹了記一次Docker生產(chǎn)環(huán)境搭建的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-06-06docker如何導(dǎo)出指定時(shí)間段內(nèi)日志
這篇文章主要介紹了docker如何導(dǎo)出指定時(shí)間段內(nèi)日志問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-05-05docker 部署prometheus+grafana的過(guò)程詳解
這篇文章主要介紹了docker 部署prometheus+grafana的過(guò)程,本文通過(guò)示例圖文相結(jié)合給大家介紹的非常詳細(xì),需要的朋友可以參考下2024-03-03Docker consul的容器服務(wù)更新與發(fā)現(xiàn)的問(wèn)題小結(jié)
這篇文章主要介紹了Docker consul的容器服務(wù)更新與發(fā)現(xiàn),講解了服務(wù)注冊(cè)與發(fā)現(xiàn)的基本概念講解,本文給大家介紹的非常詳細(xì),需要的朋友可以參考下2021-08-08IDEA集成Docker實(shí)現(xiàn)打包的方法
本文主要介紹了IDEA集成Docker實(shí)現(xiàn)打包的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-01-01