在Docker守护进程停机期间保持容器运行(即重启Docker时,正在运行的容器不会停止)

简介: 在Docker守护进程停机期间保持容器运行(即重启Docker时,正在运行的容器不会停止)

前言:


在默认情况下,当 Docker 守护进程终止时,它将关闭正在运行的容器。不过,我们可以配置该守护进程,以便在该守护进程不可用时容器仍在运行。这种功能称为实时恢复。实时还原选项有助于减少由于守护进程崩溃、计划中断或升级而导致的容器停机时间。


Docker官方相关详细文档:https://docs.docker.com/config/containers/live-restore/


具体方法:


1.将配置添加到守护进程配置文件中。在 Linux 上,默认的配置文件为/etc/docker/daemon.json

vim /etc/docker/daemon.json
{
  "live-restore": true
}

2.Docker reload配置(不会重启docker)


给dockerd发送 SIGHUP信号,dockerd收到信号后会reload配置

systemctl reload docker  / kill -SIGHUP $(pidof dockerd)

3.检查上面的配置是否成功

docker info | grep -i live

4.重启Docker,此时重启Docker时就容器就不会停止了

systemctl restart docker

实例:


1.查看当前Docker容器运行状态

[root@localhost ~]# docker ps
CONTAINER ID   IMAGE                                      COMMAND                  CREATED             STATUS             PORTS                                       NAMES
b1364c71a6b5   lizhenliang/tomcat:latest                  "catalina.sh run"        About an hour ago   Up About an hour   0.0.0.0:8080->8080/tcp, :::8080->8080/tcp   java
434bcfed5c5d   registry.aliyuncs.com/helowin/oracle_11g   "/bin/sh -c '/home/o…"   10 months ago       Up 29 minutes      0.0.0.0:1521->1521/tcp, :::1521->1521/tcp   oracle_11g
#可以看到上面两个容器的运行时间分别为1小时、29分钟

2.添加"live-restore": true配置

[root@localhost ~]# vi /etc/docker/daemon.json
{
"registry-mirrors": ["https://hx983jf6.mirror.aliyuncs.com"],
"graph": "/mnt/data",
"live-restore": true
}

3.更新docker配置(不会重启docker,只是更新配置)

[root@localhost ~]# systemctl reload docker 或者发送信号 kill -SIGHUP $(pidof dockerd)

4.查看上面的 "live-restore": true配置是否成功

[root@localhost ~]# docker info | grep -i live
 Live Restore Enabled: true

5.重启Docker,验证容器是否会停止

[root@localhost ~]# systemctl restart docker     #重启docker
[root@localhost ~]# docker ps
CONTAINER ID   IMAGE                                      COMMAND                  CREATED             STATUS             PORTS                                       NAMES
b1364c71a6b5   lizhenliang/tomcat:latest                  "catalina.sh run"        About an hour ago   Up About an hour   0.0.0.0:8080->8080/tcp, :::8080->8080/tcp   java
434bcfed5c5d   registry.aliyuncs.com/helowin/oracle_11g   "/bin/sh -c '/home/o…"   10 months ago       Up 32 minutes      0.0.0.0:1521->1521/tcp, :::1521->1521/tcp   oracle_11g

可以看到在我们重启完Docker后,上面在运行的两个容器的运行时间分别为1小时、32分钟,容器并没有在我们重启Docker时停止,而是一直保持运行状态 。以后不用再担心处理问题时必须重启 dockerd 时会影响现有业务了,如升级 docker 版本、dockerd 内存泄漏等!

相关文章
|
11天前
|
SQL 数据库 Docker
【赵渝强老师】在Docker中运行达梦数据库
本文介绍了在Docker容器中部署达梦数据库(DM 8)的具体步骤,包括创建文件夹、下载安装包、导入镜像、启动容器、登录数据库及查看状态等操作。同时,通过视频讲解辅助理解。文中还分析了将数据库服务容器化的潜在问题,如数据安全性、硬件资源争用、网络带宽占用和额外隔离带来的挑战,指出数据库服务在生产环境中可能不适合容器化的原因。
【赵渝强老师】在Docker中运行达梦数据库
|
5天前
|
数据库
【YashanDB知识库】服务器重启后启动yasom和yasagent进程时有告警
【YashanDB知识库】服务器重启后启动yasom和yasagent进程时有告警
|
7天前
|
数据库
【YashanDB知识库】服务器重启后启动yasom和yasagent进程时有告警
本文介绍了YashanDB在特定场景下的问题分析与解决方法。当使用yasboot重启数据库后,yasom和yasagent进程虽启动成功但出现告警,原因是缺少libnsl.so.1库文件或环境变量配置错误。解决步骤包括:检查系统中是否存在该库文件,若不存在则根据操作系统类型安装(有外网时通过yum或apt,无外网时创建符号链接),若存在则调整环境变量配置,并重新启动相关进程验证问题是否解决。
|
2月前
|
PHP Docker 容器
如何在宿主主机运行容器中的php守护进程
在Docker容器中同时运行多个程序(如Nginx+PHP+Ftp)时,需用`docker exec`命令启动额外服务。首先通过`php -v`查看PHP版本,再用`which php-fpm7.4`确认PHP安装路径,通常返回`/usr/sbin/php-fpm7.4`。最后直接运行该路径启动PHP-FPM服务,确保其正常工作。
58 14
|
3月前
|
前端开发 应用服务中间件 nginx
docker安装nginx,前端项目运行
通过上述步骤,你可以轻松地在Docker中部署Nginx并运行前端项目。这种方法不仅简化了部署流程,还确保了环境的一致性,提高了开发和运维的效率。确保按步骤操作,并根据项目的具体需求进行相应的配置调整。
266 25
|
3月前
|
监控 搜索推荐 开发工具
2025年1月9日更新Windows操作系统个人使用-禁用掉一下一些不必要的服务-关闭占用资源的进程-禁用服务提升系统运行速度-让电脑不再卡顿-优雅草央千澈-长期更新
2025年1月9日更新Windows操作系统个人使用-禁用掉一下一些不必要的服务-关闭占用资源的进程-禁用服务提升系统运行速度-让电脑不再卡顿-优雅草央千澈-长期更新
221 2
2025年1月9日更新Windows操作系统个人使用-禁用掉一下一些不必要的服务-关闭占用资源的进程-禁用服务提升系统运行速度-让电脑不再卡顿-优雅草央千澈-长期更新
|
4月前
|
监控 Docker 容器
在Docker容器中运行打包好的应用程序
在Docker容器中运行打包好的应用程序
|
4月前
|
存储 Prometheus 监控
Docker容器内进行应用调试与故障排除的方法与技巧,包括使用日志、进入容器检查、利用监控工具及检查配置等,旨在帮助用户有效应对应用部署中的挑战,确保应用稳定运行
本文深入探讨了在Docker容器内进行应用调试与故障排除的方法与技巧,包括使用日志、进入容器检查、利用监控工具及检查配置等,旨在帮助用户有效应对应用部署中的挑战,确保应用稳定运行。
153 5
|
4月前
|
开发框架 安全 开发者
Docker 是一种容器化技术,支持开发者将应用及其依赖打包成容器,在不同平台运行而无需修改。
Docker 是一种容器化技术,支持开发者将应用及其依赖打包成容器,在不同平台运行而无需修改。本文探讨了 Docker 在多平台应用构建与部署中的作用,包括环境一致性、依赖管理、快速构建等优势,以及部署流程和注意事项,展示了 Docker 如何简化开发与部署过程,提高效率和可移植性。
113 4
|
7天前
|
Linux 数据库 Perl
【YashanDB 知识库】如何避免 yasdb 进程被 Linux OOM Killer 杀掉
本文来自YashanDB官网,探讨Linux系统中OOM Killer对数据库服务器的影响及解决方法。当内存接近耗尽时,OOM Killer会杀死占用最多内存的进程,这可能导致数据库主进程被误杀。为避免此问题,可采取两种方法:一是在OS层面关闭OOM Killer,通过修改`/etc/sysctl.conf`文件并重启生效;二是豁免数据库进程,由数据库实例用户借助`sudo`权限调整`oom_score_adj`值。这些措施有助于保护数据库进程免受系统内存管理机制的影响。