docker容器的重启策略

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
容器镜像服务 ACR,镜像仓库100个 不限时长
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
简介: docker容器的重启策略

docker的容器运行后并不会是永远就运行了,和宿主机的资源分配等等都有关系,各种意外会导致容器意外退出,手动重启容器肯定是非常愚蠢的一件事情。那么,我们是应该有一套针对容器意外退出的补救策略了(也就是重启策略)。

一,容器的重启策略具体内容


Docker容器的重启策略如下:

no,默认策略,在容器退出时不重启容器---------任何时候都不重启容器(可以理解为躺平策略)。

on-failure,在容器非正常退出时(退出状态非0),才会重启容器,------退出状态码非0的时候重启,直到状态码为0为止,不限次数的重启。

on-failure:3,在容器非正常退出时重启容器,最多重启3次,三次之后是什么样就什么样了。-----退出状态码非0的时候重启,直到状态码为0为止。

always,在容器退出时总是重启容器,直到正常。------下面的全部状态码的时候重启。

unless-stopped,在容器退出时总是重启容器,但是不考虑在Docker守护进程启动时就已经停止了的容器,也就是说,如果docker的守护进程启动后,然后因为一些其它原因导致容器退出,将不会重启容器。----------退出状态码不是0,125,126,127的时候。

二,容器的退出状态码


docker run的退出状态码如下:

0,表示正常退出

非0,表示异常退出(退出状态码采用chroot标准)

125,Docker守护进程本身的错误

126,容器启动后,要执行的默认命令无法调用

127,容器启动后,要执行的默认命令不存在

其他命令状态码,容器启动后正常执行命令,退出命令时该命令的返回状态码作为容器的退出状态码

三,容器重启策略的应用场景


容器有两种运行方式

一种是前台运行,此时运行的容器将打印容器运行日志到屏幕上。也就是Foreground 前台模式(默认)。

另一种是后台运行模式,运行的容器是在后台运行,不打印任何日志输出到屏幕,也就是Detached 后台模式。

具体的说就是docker run 命令 后加参数 -it 是前台模式,带有-d参数即使有-it参数,依然是后台运行模式。因此,容器的重启策略是适合在Detached 后台模式运行时使用的,并不适合前台模式。

四,容器重启策略的定义位置


重启策略可定义在docker守护服务的自启脚本内,也可以在run容器的时候单独指定,当然,docker-compose编排的时候也可以按自己的需要指定啦。

比如,自启脚本内容如下:

[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
After=network-online.target firewalld.service containerd.service
Wants=network-online.target
[Service]
Type=notify
ExecStart=/usr/bin/dockerd
ExecReload=/bin/kill -s HUP $MAINPID
TimeoutSec=0
RestartSec=2
Restart=always
StartLimitBurst=3
StartLimitInterval=60s
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
TasksMax=infinity
Delegate=yes
KillMode=process
[Install]
WantedBy=multi-user.target

那么,你的容器在run的时候等于是加了一个默认隐藏参数--restart=always,也就是说 docker run 的时候是默认加了--restart=alwyas 这个参数的哦。

如果我有安装一个docker,并使用的是上述自启脚本,而我又希望重启策略是on-failure:3,那么,run容器的命令应该是:

docker run -itd --name=自定义的容器名称 --restart=on-failure:3 镜像名称

此时,如果这个容器由于某种原因第一次启动失败了,那么,该容器将会再重启两次,而不会一直无限重启啦。

目录
相关文章
|
1天前
|
运维 Docker 微服务
掌握 Docker Compose:简化你的多容器应用部署
在微服务架构和容器化技术普及的今天,管理多容器部署变得颇具挑战。Docker Compose 通过一个 YAML 文件定义和运行多容器应用,简化了部署和运维。本文介绍其基本概念、使用方法及优势,包括服务、项目、卷和网络等核心概念,并提供从安装到管理服务的详细步骤,助你轻松掌握 Docker Compose,提高开发效率和应用运维质量。
|
2天前
|
Cloud Native 持续交付 Docker
探索Docker容器化技术及其在软件开发中的应用
探索Docker容器化技术及其在软件开发中的应用
13 7
|
1天前
|
弹性计算 运维 持续交付
探索Docker容器化技术及其在生产环境中的应用
探索Docker容器化技术及其在生产环境中的应用
10 5
|
2天前
|
存储 虚拟化 开发者
深入理解Docker容器化技术
深入理解Docker容器化技术
20 6
|
4天前
|
持续交付 开发者 Docker
掌握 Docker:容器化技术在现代开发中的应用
Docker 是一个开源容器化平台,使开发者能够将应用程序及其依赖项封装在轻量级容器中,确保跨平台的一致性。本文介绍了 Docker 的基本概念、核心组件及优势,并展示了其在快速部署、一致性、可移植性和微服务架构中的应用。通过示例说明了 Docker 在本地开发环境搭建、服务依赖管理和 CI/CD 流程中的作用,以及多阶段构建、资源限制和网络模式等高级特性。掌握 Docker 可大幅提升开发效率和应用管理能力。
|
1天前
|
Cloud Native 持续交付 Docker
探索容器化技术Docker的奥秘
探索容器化技术Docker的奥秘
11 3
|
7天前
|
关系型数据库 数据库 网络虚拟化
Docker环境下重启PostgreSQL数据库服务的全面指南与代码示例
由于时间和空间限制,我将在后续的回答中分别涉及到“Python中采用lasso、SCAD、LARS技术分析棒球运动员薪资的案例集锦”以及“Docker环境下重启PostgreSQL数据库服务的全面指南与代码示例”。如果你有任何一个问题的优先顺序或需要立即回答的,请告知。
16 0
|
12天前
|
应用服务中间件 Shell nginx
Docker容器操作基础命令
关于Docker容器操作基础命令的教程,涵盖了从启动、查看、删除容器到端口映射和容器信息获取的一系列常用命令及其使用方法。
53 14
|
26天前
|
存储 Docker 容器
在Docker中,容器退出后,通过docker ps命令查看不到,数据会丢失么?
在Docker中,容器退出后,通过docker ps命令查看不到,数据会丢失么?
|
2月前
|
Shell 应用服务中间件 nginx
docker 服务,镜像,容器命令总结
docker 服务,镜像,容器命令总结
132 4