Skip to main content

docker的容器重启策略

Docker 的重启策略用于在容器退出后,自动重启容器。不同的重启策略适用于不同的应用场景,以提高服务的可用性和容错能力。以下是 Docker 支持的重启策略以及它们的用法和场景。

重启策略类型

  1. no(默认值)

    • 描述: 不自动重启容器。
    • 适用场景: 当你希望容器退出后保持不变,以便进行故障排查或其他手动操作时。
  2. always

    • 描述: 无论退出代码如何,总是重启容器。
    • 适用场景: 适用于需要持续运行的服务,即使出现错误也要尽快恢复。适用于大多数服务。
  3. unless-stopped

    • 描述: 除非容器被手动停止,否则总是重启容器。
    • 适用场景: 与 always 类似,但如果手动停止容器后,它不会自动重启。这在调试和维护期间很有用。
  4. on-failure

    • 描述: 仅当容器以非零退出代码退出时才重启。可以指定重启次数。
    • 适用场景: 适用于容器偶尔可能因错误而退出的情况,通过限制重启次数来避免无限重启。

在 Docker Compose 中使用重启策略

docker-compose.yml 文件中,可以通过 restart 字段指定服务的重启策略。

version: '3.8'

services:
web:
image: nginx:latest
restart: always # 使用 always 重启策略
ports:
- "80:80"

app:
build: ./app
restart: on-failure:5 # 使用 on-failure 策略,最多重启 5 次
environment:
- NODE_ENV=production

在 Docker CLI 中使用重启策略

在使用 docker run 命令启动容器时,可以使用 --restart 选项指定重启策略。

# 使用 always 重启策略
docker run --name my-container --restart always nginx:latest

# 使用 on-failure 策略,最多重启 3 次
docker run --name my-container --restart on-failure:3 myapp

重启策略的使用场景

  • no: 适用于需要手动排查的调试环境。
  • always: 适用于生产环境中的关键服务,确保服务持续运行。
  • unless-stopped: 适用于开发环境,允许开发者在需要时手动停止容器。
  • on-failure: 适用于非关键服务或需要错误限制的服务,避免无限重启导致资源浪费。