在实际部署中,我们常常希望容器能够像系统服务一样运行:自动启动、守护运行、统一管理
本章将介绍如何将 Docker 容器与系统服务(如 systemd)集成,实现容器的后台运行、开机自启与日志管理
虽然 Docker 本身支持后台运行(-d 参数),但在生产环境中,使用系统服务管理容器具有以下优势:
路径:/etc/systemd/system/myapp.service
ini[Unit]
Description=My Docker App
After=docker.service
Requires=docker.service
[Service]
Restart=always
ExecStart=/usr/bin/docker run --rm -p 8080:80 --name myapp yourname/myapp
ExecStop=/usr/bin/docker stop myapp
[Install]
WantedBy=multi-user.target
说明:
ExecStart:容器启动命令ExecStop:容器停止命令Restart=always:容器异常退出后自动重启bashsudo systemctl daemon-reexec
sudo systemctl daemon-reload
sudo systemctl enable myapp
sudo systemctl start myapp
查看状态:
bashsudo systemctl status myapp
停止服务:
bashsudo systemctl stop myapp
无需 systemd,也可通过 Docker 自带的重启策略实现守护运行:
bashdocker run -d --restart=always yourname/myapp
可选策略:
no:默认,不自动重启on-failure:仅在非 0 状态退出时重启always:始终重启unless-stopped:除非手动停止,否则始终重启docker logs 查看容器日志iniStandardOutput=journal
StandardError=journal
除了 systemd,还可以使用 Supervisor 管理容器进程:
ini[program:myapp]
command=docker run --rm -p 8080:80 yourname/myapp
autostart=true
autorestart=true
stderr_logfile=/var/log/myapp.err.log
stdout_logfile=/var/log/myapp.out.log
将 Docker 容器与系统服务集成,可以提升部署的稳定性与可维护性
无论是使用 systemd、Supervisor 还是 Docker 自带的重启策略,都能实现容器的自动运行与统一管


本文作者:AsZero
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!