Docker容器无法被stop or kill问题的解决方法

 更新时间:2019年09月17日 14:23:38   作者:码代码的陈同学  
这篇文章主要介绍了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

这里仅做下记录,学习下Docker的四种Restart Policy。

no

no是默认策略,在任何情况下都不会restart容器

on-failure

on-failure表示如果容器 exit code异常时将restart,如果容器exit code正常将不做任何处理。

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。列举几个场景:

  1. 容器以非正常状态码终止(如应用内存不足导致终止)
  2. 容器被正常 stopped,然后机器重启或Docker服务重启
  3. 容器在宕机在正常运行,然后重启机器或Docker服务重启

以上情况always侧露都会restart容器,但是如果是 on-failure和no策略,机器被重启之后容器将无法restart。

unless-stopped

unless-stopped 和 always 基本一样,只有一个场景 unless-stopped有点特殊:

如果容器正常stopped,然后机器重启或docker服务重启,这种情况下容器将不会被restart

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • 基于docker部署skywalking实现全链路监控功能

    基于docker部署skywalking实现全链路监控功能

    这篇文章主要介绍了基于docker部署skywalking实现全链路监控,skywalking提供了在很多不同的场景下用于观察和监控分布式系统的方式,文中给大家介绍如何快速部署skywalking全链路监控,感兴趣的朋友一起看看吧
    2022-03-03
  • windows下Docker部署Flask的详细教程

    windows下Docker部署Flask的详细教程

    这篇文章主要介绍了windows下Docker部署Flask的教程,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-01-01
  • docker进行RocketMq集群部署方式

    docker进行RocketMq集群部署方式

    这篇文章主要介绍了docker进行RocketMq集群部署方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-04-04
  • 十分钟学会用docker部署微服务

    十分钟学会用docker部署微服务

    这篇文章主要介绍了十分钟学会用docker部署微服务,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-10-10
  • 深入理解 Docker 数据卷(Data Volume)

    深入理解 Docker 数据卷(Data Volume)

    本文详细介绍了Docker数据卷(DataVolume)的概念、作用、使用命令、挂载方式以及最佳实践,数据卷是Docker中实现数据持久化和共享的关键机制之一,通过本文的学习,读者可以更好地掌握数据卷的使用方法,从而在容器化应用中进行有效的数据管理
    2024-11-11
  • Dockerfile如何使用alpine系统制作haproxy镜像

    Dockerfile如何使用alpine系统制作haproxy镜像

    这篇文章主要介绍了Dockerfile如何使用alpine系统制作haproxy镜像问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-05-05
  • Docker构建Maven+Tomcat基础镜像的实现

    Docker构建Maven+Tomcat基础镜像的实现

    这篇文章主要介绍了Docker构建Maven+Tomcat基础镜像的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-09-09
  • 给docker创建的elasticsearch容器添加密码简单步骤

    给docker创建的elasticsearch容器添加密码简单步骤

    在使用Elasticsearch(ES)Docker容器时,有时需要设置密码来保护数据的安全性,这篇文章主要给大家介绍了关于给docker创建的elasticsearch容器添加密码的简单步骤,需要的朋友可以参考下
    2024-02-02
  • Docker更换镜像源详细代码教程

    Docker更换镜像源详细代码教程

    Docker是一个开源的应用容器引擎,使用Go语言编写,允许开发者将应用及依赖打包到轻量级容器中,可在不同Linux系统间移植,这篇文章主要给大家介绍了关于Docker更换镜像源的相关资料,需要的朋友可以参考下
    2024-08-08
  • Idea通过docker compose 发布项目的过程

    Idea通过docker compose 发布项目的过程

    这篇文章主要介绍了Idea结合docker-compose发布项目,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-08-08

最新评论