Docker容器自动重启,restart=always参数

前言

服务器重启了,Docker容器没跟着起来?或者容器崩了,不自动重启?本文讲怎么配置自动重启。

一、restart参数

Docker用 --restart 参数控制容器的重启策略。

四种策略

策略 说明
no 不自动重启(默认)
on-failure 非正常退出时重启
always 总是自动重启
unless-stopped 除非手动停了,否则一直重启

二、always策略

用法

docker run -d --name nginx --restart=always nginx

什么时候会重启

  1. 容器崩了(非正常退出)
  2. Docker服务重启
  3. 服务器重启(只要Docker开机自启)

特点

  • 不管什么原因停了,都会自动起来
  • 服务器重启后也会自动启动

三、unless-stopped策略

用法

docker run -d --name nginx --restart=unless-stopped nginx

和always的区别

  • always:就算你手动停了,重启Docker后还是会起来
  • unless-stopped:如果你手动停了,重启Docker后就不起来了

推荐用unless-stopped,更灵活。

四、on-failure策略

用法

docker run -d --name nginx --restart=on-failure:5 nginx

说明

  • 只有非正常退出时才重启
  • :5 表示最多重启5次,超过就不重启了

什么时候用

比如批处理任务,失败了重试几次,一直失败就算了。

五、no策略(默认)

docker run -d --name nginx --restart=no nginx

不自动重启,停了就停了。

六、修改已有容器的重启策略

运行中的容器

docker update --restart=always 容器名

不用删容器,直接改。

例子

docker update --restart=always nginx
docker update --restart=unless-stopped mysql

七、Docker Compose里的配置

services:
  nginx:
    image: nginx
    restart: always

或者:

restart: unless-stopped

八、服务器开机自启

1. Docker服务开机自启

systemctl enable docker

2. 容器开机自启

只要容器设了 --restart=always 或 unless-stopped,Docker启动后容器就会自动启动。

验证

重启服务器试试:

reboot

重启完看看容器起来没:

docker ps

九、查看重启策略

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

输出:

always

十、常见坑

坑1:设了always,服务器重启后没起来

原因: Docker服务没设开机自启。

解决:

systemctl enable docker

坑2:手动停了,又自动起来了

用了 always 策略,手动停了也会起来。

解决: 想彻底停掉:

docker update --restart=no 容器名
docker stop 容器名

坑3:一直重启,死循环

容器启动就崩,崩了又重启,死循环。

检查:

docker logs 容器名

看看为什么启动失败,先把问题修了。

坑4:on-failure重启次数

--restart=on-failure:5

最多重启5次,超过就不重启了。

注意: 这个5是次数,不是间隔。

十一、推荐配置

生产环境推荐

docker run -d \
  --name nginx \
  --restart=unless-stopped \
  -p 80:80 \
  nginx
  • 服务器重启自动起来
  • 手动停了就不自动起
  • 灵活

数据库推荐

docker run -d \
  --name mysql \
  --restart=unless-stopped \
  -p 3306:3306 \
  -e MYSQL_ROOT_PASSWORD=123456 \
  -v /data/mysql:/var/lib/mysql \
  mysql:5.7

总结

记住:

  1. --restart=always 总是自动重启
  2. --restart=unless-stopped 推荐,手动停了不自动起
  3. 改已有容器:docker update --restart=xxx 容器名
  4. 服务器开机自启要先 systemctl enable docker

最常用:

docker run -d --name nginx --restart=unless-stopped nginx

遇到问题加QQ23979811 协助处理


emer 发布于  2026-10-8 08:28