陈同学
微服务
Accelerator
About
# Docker容器无法被stop or kill问题 > Docker version 1.13.1 ## 问题过程 **某环境一个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的问题,资料也很多。 ## 拓展阅读: Docker Restart Policy 解决过程中了解了很多Docker Restart Policy知识和Bug,这篇文章写的简单易懂:[Ensuring Containers Are Always Running with Docker’s Restart Policy](https://blog.codeship.com/ensuring-containers-are-always-running-with-dockers-restart-policy/) 这里仅做下记录,学习下Docker的四种Restart Policy。 ### no no是默认策略,在任何情况下都不会restart容器 ### on-failure on-failure表示如果容器 **exit code**异常时将restart,如果容器**exit code**正常将不做任何处理。 ```shell sudo docker run -d --name testing_restarts --restart on-failure:5 testing_restarts 85ff2f096bac9965a9b8cffbb73c1642bf7b64a2173bbd145961231861b95819 ``` on-failure[:max-retries],max-retries表示最大重启次数。 on-failure的好处是:如果容器以正常exit code终止,将不会 restart ### always 无论容器**exit code**是什么,都会自动restart。列举几个场景: * 容器以非正常状态码终止(如应用内存不足导致终止) * 容器被正常 stopped,然后机器重启或Docker服务重启 * 容器在宕机在正常运行,然后重启机器或Docker服务重启 以上情况**always**侧露都会restart容器,但是如果是 **on-failure和no**策略,机器被重启之后容器将无法restart。 ###unless-stopped **unless-stopped** 和 **always** 基本一样,只有一个场景 **unless-stopped**有点特殊: 如果容器正常stopped,然后机器重启或docker服务重启,这种情况下容器将不会被restart
本文由
cyj
创作,可自由转载、引用,但需署名作者且注明文章出处。
文章标题:
Docker容器无法被stop or kill问题
文章链接:
https://chenyongjun.vip/articles/53
扫码或搜索 cyjrun 关注微信公众号, 结伴学习, 一起努力