发布于2026-08-19 阅读(0)
扫一扫,手机访问
必须将Docker纳入systemd管理:执行systemctl status docker确认托管状态,若未注册则手动创建/etc/systemd/system/docker.service,正确配置ExecStart路径、Type=notify、Restart=on-failure等关键项,再运行systemctl daemon-reload && systemctl enable --now docker完成注册与启动,并验证PPID为1、自动重启及slice隔离生效。

在麒麟系统上,容器后台进程若未被systemd接管,关闭终端即终止服务,导致业务中断或数据丢失。必须将Docker等容器引擎纳入systemd生命周期管理,才能实现自动恢复、开机自启与状态监控。
运行 systemctl status docker 命令,若输出中存在 active (running) 字样,并且Main PID显示的是dockerd进程号,这就表明已经完成了托管操作;要是出现 “Unit docker.service could not be found” 的提示,那就意味着还未将其注册为系统服务。
检查进程树:运行 ps -eo pid,ppid,comm | grep dockerd,若 PPID 不为 1(即不是 systemd 的子进程),说明是手动 ./dockerd & 启动的孤立进程,【必须停止并卸载该进程后重新配置】。
适用于 tar 包解压部署或离线安装场景,需手动生成 service 文件:
第一步:创建 systemd 服务单元文件:sudo vim /etc/systemd/system/docker.service
第二步:写入标准服务定义(注意 ExecStart 路径需与实际 dockerd 二进制位置一致,常见为 /usr/bin/dockerd 或 /usr/local/bin/dockerd):
[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
After=network-online.target firewalld.service
Wants=network-online.target
[Service]
Type=notify
ExecStart=/usr/bin/dockerd
ExecReload=/bin/kill -s HUP $MAINPID
TimeoutStartSec=0
Restart=on-failure
RestartSec=5
StartLimitBurst=3
StartLimitInterval=60s
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
TasksMax=infinity
Delegate=yes
KillMode=process
[Install]
WantedBy=multi-user.target
第三步:重载配置并启用服务:sudo systemctl daemon-reload && sudo systemctl enable --now docker
这一步不可跳过——【enable --now 同时完成开机自启注册与立即启动,缺一不可】。
方法一:查看 docker 服务主进程的父进程 ID:systemctl show --property MainPID docker | cut -d= -f2 | xargs ps -o ppid= -p,结果应为 1(即 systemd)。
方法二:检查容器内进程是否挂载于docker.slice之下:systemctl status docker | grep -q "Scope: docker" || echo "未启用slice隔离"。倘若需要进行资源限制,可于service文件的[Service]段添加Slice=docker.slice,而后重启服务。
方法三:模拟崩溃测试——手动 kill -9 主 dockerd 进程,等待 5 秒后执行 systemctl status docker,应显示自动重启成功且状态为 active (running)。
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
4
5
6
7
8
9