linux中设置docker容器开机自启需两步:先执行sudo systemctl enable docker确保docker服务开机自启;再为容器设置--restart=unless-stopped策略或通过systemd托管,使容器在系统重启后自动运行。

Linux 中设置 Docker 容器开机自动启动,核心是两步:先确保 Docker 服务本身能开机自启,再让容器具备重启能力或由系统服务托管。不依赖额外脚本,用原生机制最稳。
Docker 服务必须先开机自启
容器无法启动,前提是 Docker 守护进程得先跑起来。执行以下命令启用服务自启:
-
启用 Docker 服务开机启动:
sudo systemctl enable docker -
验证是否生效:
systemctl is-enabled docker→ 返回enabled即成功 - 如未运行,可手动启动一次:
sudo systemctl start docker
给容器设置重启策略(推荐方式)
这是最轻量、最常用的方法,直接利用 Docker 内置的 --restart 策略。它不依赖外部调度,系统重启后,Docker 会按策略自动拉起容器。
-
新建容器时指定策略:
docker run -d --name myapp --restart unless-stopped -p 8080:80 nginx:alpine -
已存在容器补设策略:
docker update --restart unless-stopped myapp -
策略说明:
-
unless-stopped:系统重启后自动启动,且除非你手动docker stop,否则一直保持运行(生产环境首选) -
always:哪怕你手动停了,系统重启后仍会强行拉起(适合关键守护类服务) -
on-failure[:max-retries]:仅当容器异常退出(非 0 状态码)时重试
-
用 systemd 托管单个容器(需精细控制时)
适用于需要定制启动顺序、前置清理、失败重试逻辑,或容器启动命令较复杂的情况。
- 创建服务文件:
sudo nano /etc/systemd/system/myapp-container.service - 填入内容(替换
myapp和镜像参数):
[Unit] Description=MyApp Container Requires=docker.service After=docker.service [Service] Type=oneshot ExecStartPre=-/usr/bin/docker rm -f myapp ExecStart=/usr/bin/docker run --name myapp --restart=unless-stopped -p 8080:80 nginx:alpine ExecStop=/usr/bin/docker stop myapp ExecStopPost=/usr/bin/docker rm myapp Restart=on-failure RestartSec=5 [Install] WantedBy=multi-user.target
- 启用并测试:
sudo systemctl daemon-reload && sudo systemctl enable myapp-container.service && sudo systemctl start myapp-container.service
补充说明
若用 docker-compose.yml 管理多容器,只需在对应 service 下加 restart: unless-stopped,然后用 systemctl enable docker-compose@your-app.service(需配合官方 compose systemd 模板)或直接设为用户级服务即可。所有方案都要求 Docker 服务已启用自启,否则一切无效。











