Docker容器的退出状态码及解决方法

容器内应用启动异常, 导致容器很快就结束或者构建镜像时失败了等问题

  • 会出现的情况:

    1. 容器处于Exited异常退出时,将无法用docker exec进入容器内,会提示该容器不在运行中
    2. docker log显示的错误无法在外部进行修改
  • 解决的方法

    1.「docker ps -a」查看当前容器状态,对应Exited状态码的含义

状态码 描述
0 表示正常退出
非 0 表示异常退出(退出状态码采用 chroot 标准)
125 Docker 守护进程本身的错误
126 容器启动后,要执行的默认命令无法调用
127 容器启动后,要执行的默认命令不存在
137 表明容器收到了 SIGKILL 信号,进程被杀掉,对应kill -9
139 表明容器收到了 SIGSEGV 信号,无效的内存引用,对应kill -11
143 表明容器收到了 SIGTERM 信号,终端关闭,对应kill -15

Docker容器的退出状态码及解决方法_第1张图片

  1. 「docker inspect」查看当前state,确认是否与OOMKilled等有关

  2. 根据dockerfile中使用的参数来重新启动容器,若为CMD,则在docker run的时候在后面加入命令行参数,覆盖掉CMD内容;如果是ENTRYPOINT,在docker run后加上“–entrypoint”覆盖掉dockerfile中ENTRYPOINT的内容,进入新的容器内进行调试

  3. 如果是配置文件类等错误,可以用「docker cp」将容器内错误的配置文件拷贝到本机上,修改后再重新拷贝回去,然后「docker start」重新运行容器

重启策略

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

你可能感兴趣的:(错误及总结,运维,docker)