• [转载]Docker容器无法被stop or kill问题


    来源:

    问题过程

    某环境一个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,即不会自动重启

    • no,默认策略,在容器退出时不重启容器
    • on-failure,在容器非正常退出时(退出状态非0),才会重启容器
    • on-failure:3,在容器非正常退出时重启容器,最多重启3次
    • always,在容器退出时总是重启容器
    • unless-stopped,在容器退出时总是重启容器,但是不考虑在Docker守护进程启动时就已经停止了的容器

    > 如果需要更新运行中容器的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。列举几个场景:

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

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

    unless-stopped

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

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

  • 相关阅读:
    1月27日 常用函数
    1月25日 JavaScript的DOM操作
    1月25日 JavaScript简介与语法
    1月24日 样式表案例
    5月14日 数字顺序打印并求和
    5月14日 根据班级人数,求平局分,最大值,最小值
    5月14日 九九乘法口诀
    5月14日 打印100以内与7有关的数
    5月14日 函数练习 100以内奇数的和
    5月14日 枚举类型
  • 原文地址:https://www.cnblogs.com/A-FM/p/11279385.html
Copyright © 2020-2023  润新知