Docker容器自启动设置方法:新手也能轻松掌握的3种方式

为什么要让 Docker 容器自启动

Docker 容器默认不会在服务器重启后自动运行。
如果你的项目依赖容器提供服务,比如数据库、Web 应用,一旦机房断电或系统维护重启,所有容器都会停止,需要手动启动,非常麻烦。配置容器自启动后,只要 Docker 服务启动,容器就会自动跟着跑起来,省心又稳定。

写命令前需要确认的环境

在动手之前,请确保你的服务器已经安装了 Docker,并且当前用户有执行 Docker 命令的权限(一般加在 docker 用户组里)。
可以用下面命令检查:

docker --version

如果返回版本号(例如 24.0.7),说明 Docker 已安装。
接着运行一个测试容器看看能不能正常工作:

docker run hello-world

能打印出欢迎信息就没问题。
另外,如果你打算修改已有的生产容器,建议先备份容器配置或提前在测试环境试一次。

实战:三种自启动设置方法

方法一:创建容器时直接指定自启动(最推荐)

当你用 docker run 启动新容器时,加上 --restart 参数。
下面是常用策略:

  • no:不自动重启(默认)
  • always:容器退出后总是重启,包括 Docker 服务启动时
  • unless-stopped:除非手动停止,否则一直重启(Docker 服务重启后也重启)
  • on-failure[:max-retries]:只在容器异常退出时重启,可指定最大重试次数

示例:让一个 Nginx 容器随系统自动启动:

docker run -d --name my-nginx --restart always -p 80:80 nginx:latest

参数 -d 表示后台运行,--restart always 让容器无论因什么原因退出都自动重启,服务器重启后也会自动启动。

方法二:对已有容器修改自启动策略

如果容器已经运行,不需要重建,使用 docker update 命令:

docker update --restart always 容器名或容器ID

比如让你的 MySQL 容器自启动:

docker update --restart unless-stopped mysql-container

修改后立即生效,不需要重启容器。
而且这个设置会写入容器配置,机器重启后依然有效。

方法三:使用 docker-compose 统一管理

如果你用 docker-compose 编排多个容器,可以在 docker-compose.yml 的服务块里添加 restart 字段:

version: '3'
services:
  web:
    image: nginx:latest
    restart: always
    ports:
      - "80:80"
  db:
    image: mysql:8.0
    restart: unless-stopped
    environment:
      MYSQL_ROOT_PASSWORD: example

然后执行 docker-compose up -d 启动,所有容器的自启动策略就设置好了。
下次服务器重启,docker-compose 项目里的容器也会自动运行。

避坑:为什么你设置了自启动却没生效?

1. Docker 服务本身没开自启动

容器自启动的前提是 Docker 守护进程(dockerd)随系统启动。
用下面命令确保 Docker 服务已启用自启:

sudo systemctl enable docker

如果这个没设好,容器设置再完美也没用。

2. 手动 docker stop 的容器不会自动重启

对于 restart: always,只有 docker stop 之外的退出(比如容器进程崩溃)才会自动重启。
如果你手动执行 docker stop my-container,容器会保持停止状态,不会自动拉起。要想让容器停止后也恢复,可以用 --restart unless-stopped

3. 容器依赖顺序导致启动失败

如果容器 A 依赖容器 B(比如 web 依赖 db),而两个容器都设置了自启动,Docker 不保证启动顺序。
可能导致 web 容器尝试连接数据库时数据库还没就绪,然后容器退出,自动重启后又再次失败。
解决方案:使用 docker-compose 的 depends_on,并在应用层做好重试逻辑。

验证自启配置是否生效

1. 查看单个容器的重启策略

docker inspect 容器名 --format='{{.HostConfig.RestartPolicy.Name}}'

应该输出 alwaysunless-stopped 等。
如果输出 no,说明没设置成功。

2. 模拟服务器重启

如果你在本地测试,可以重启 Docker 服务(不会影响运行中的容器):

sudo systemctl restart docker

等待几秒,再用 docker ps 查看目标容器是否还在运行。
如果是 alwaysunless-stopped,容器应该还在列表中。

3. 重启整个服务器(生产环境慎用)

如果条件允许,可以执行 sudo reboot,然后登录服务器,用 docker ps 确认容器已自动运行。

高频问题与解答

Q:设置自启动后,容器一直失败重启,日志全是错误怎么办?
A:先检查容器启动命令是否正确,或者依赖的资源(如端口、目录)是否就绪。建议先用 docker logs 容器名 看报错,修复错误后再设置自启动,避免疯狂重启。

Q:我用 docker-compose up -d 启动后,容器每次都是手动重启才生效?
A:请确认 docker-compose.yml 中每个服务都写了 restart 字段,并且你使用的是当前目录下的正确文件。运行 docker-compose config 可以查看实际配置。

Q:容器自启动和 systemd 服务自启动冲突吗?
A:不冲突。Docker 容器的自启策略是由 Docker 守护进程管理的,而 systemd 负责管理 dockerd 本身。我们只需把 dockerd 设为开机自启,容器策略就由 Docker 内部接管。

总结

Docker容器自启动设置方法其实就三步:创建时加 --restart always、对已有容器用 docker update、或者在 docker-compose 里声明 restart
新手最容易忽略的是 Docker 服务本身的自启和手动 docker stop 的容器不会自动恢复。
只要你按本文的步骤操作,再用验证命令确认一下,容器就能稳稳地跟随系统自动运行,后续运维省心不少。

分享到:
上一篇
Docker容器数据卷持久化配置:零基础实现数据安全存储
下一篇
Docker日志自动清理配置:新手也能搞定的磁盘空间救星
1
系统公告

高考专属福利来袭|凭准考证免费领香港 CN2 云服务器

值高考落幕之际,泽御云开启考生专属回馈 + 产品限时特惠双重活动,助力学子暑期学习建站 高考 考生专属福利 全体应届高考生,凭高考准考证即可免费申领【香港 CN2 轻量云服务器,4 核 4G AMD 处理器】,免费使用周期 30 天,可用于搭建个人站点、编程实操、技术实训,祝各位考生金榜题名,前程似锦! 泽御云资质齐全合规自营机房,线路覆盖香港 CN2、国内 BGP、内蒙电信、美国精品线路,售后全天候技术支持。 官方网站:www.zeyuyun.com,活动限时有效,优惠逾期不再保留。
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意