`docker run --restart no,always,on-failure,unless-stopped`笔记250406

docker run --restart no,always,on-failure,unless-stopped 笔记250406

docker run --restart 用于配置容器的自动重启策略,当容器意外退出时,Docker 会根据策略自动重新启动容器。这是确保服务高可用的重要参数。


语法

bash 复制代码
docker run --restart <策略> [其他参数] <镜像>

可选策略

  1. no

    默认值,容器退出后不会自动重启

  2. on-failure[:max-retries]

    • 容器以非 0 状态码退出时自动重启(例如程序崩溃)。
    • 可选的 :max-retries 指定最大重试次数(例如 on-failure:3)。
  3. always

    • 无论退出状态码是什么,都自动重启容器(包括手动停止容器后,Docker 服务重启时也会启动该容器)。
    • 注意:docker stop 手动停止的容器不会触发此策略。
  4. unless-stopped

    • 无论退出状态码是什么,都自动重启容器
    • always 的区别:如果容器是手动停止 的(docker stop),即使 Docker 服务重启,容器也不会自动启动。
策略 说明
no 默认值,容器退出后不会自动重启。
always 无论容器因何退出(包括手动停止),都会无限次尝试重启。 (除非使用 docker stop 停止容器,否则会一直重启)
on-failure 仅在容器以非零状态码退出 时重启。 可指定最大重试次数(如 on-failure:3 表示最多尝试重启3次)。
unless-stopped 类似 always,但如果容器被手动停止docker stop),则不会自动重启,直到 Docker 服务重启(如宿主机重启后)。

使用示例

  1. 容器崩溃时自动重启(最多重试 3 次)

    bash 复制代码
    docker run --restart=on-failure:3 my_app
  2. 始终自动重启(适合关键服务)

    bash 复制代码
    docker run --restart=always nginx
  3. 除非手动停止,否则自动重启

    bash 复制代码
    docker run --restart=unless-stopped mysql
1. 总是自动重启
bash 复制代码
docker run -d --restart always nginx
  • 场景 :需要容器始终保持运行,即使被手动停止(除非显式执行 docker stop)。
  • 注意:如果容器因错误退出(如内部崩溃),会无限重启。
2. 仅在失败时重启
bash 复制代码
docker run -d --restart on-failure:5 my_app
  • 场景:容器正常退出时(如任务完成)无需重启,仅在崩溃(非零退出码)时重启。
  • on-failure:5 表示最多尝试重启5次,超过后不再重启。
3. 除非手动停止,否则重启
bash 复制代码
docker run -d --restart unless-stopped redis
  • 场景:容器需要长期运行,但允许手动停止后不再重启(除非宿主机重启)。
  • 行为
    • 如果手动执行 docker stop,容器停止且不会自动重启。
    • 如果宿主机重启,Docker 服务启动后,容器会自动重启。

注意事项

  1. 手动停止的优先级

    • 如果使用 docker stop 停止容器,alwaysunless-stopped 策略会暂停重启 ,但 unless-stopped 在宿主机重启后恢复。
    • on-failure 不会因手动停止触发重启。
  2. 退出状态码

    • on-failure 仅在容器进程返回非零退出码 时生效。例如:
      • 程序崩溃(非零码) → 触发重启。
      • 正常退出(退出码0) → 不重启。
  3. Docker 服务重启

    • alwaysunless-stopped 策略的容器会在 Docker 服务重启(如宿主机重启)后自动启动。
  4. 查看重启策略

    bash 复制代码
    docker inspect --format='{{.HostConfig.RestartPolicy.Name}}' <容器名>

常见问题

  1. 如何查看容器的重启策略?

    bash 复制代码
    docker inspect --format='{{.HostConfig.RestartPolicy.Name}}' 容器名
  2. 为什么 always 策略的容器被手动停止后仍会重启?

    如果 Docker 服务(守护进程)重启,或者宿主机重启,always 策略的容器会被重新启动。若需避免此行为,改用 unless-stopped

  3. 如何诊断容器频繁重启的问题?

    • 查看容器日志:docker logs 容器名
    • 检查容器退出状态码:docker inspect 容器名(关注 State.ExitCode


总结

策略 适用场景 手动停止后的行为
no 临时任务或测试容器 停止后不再启动
always 必须持续运行的服务(如 Web 服务器) 手动停止后仍会重启
on-failure 需要容错的后台服务(如定时任务) 手动停止后不会重启
unless-stopped 长期运行且允许手动暂停的服务(如数据库) 手动停止后需宿主机重启才会恢复



docker run--restart 参数用于定义容器的自动重启策略,确保容器在意外退出或系统故障后自动恢复。以下是详细说明和示例:


参数取值及行为

策略值 行为说明
no(默认) 容器退出后不自动重启。
on-failure 仅在容器非正常退出(退出码非0)时自动重启,适合批处理任务或临时服务。
always 无论退出码是什么,容器都会自动重启,适合长期运行的服务(如 Web 服务器)。
unless-stopped 始终重启容器,除非显式执行 docker stopdocker rm

使用示例

  1. 始终自动重启容器(如 Web 服务)

    bash 复制代码
    docker run -d --restart always nginx
    • 无论容器因何退出(如配置错误、崩溃),都会自动重启。
  2. 仅在容器异常退出时重启(如批处理任务)

    bash 复制代码
    docker run --restart on-failure:5 my-script.sh
    • :5 表示最多重启5次,超过后不再尝试。
  3. 后台运行并设置重启策略(如数据库)

    bash 复制代码
    docker run -d --name my-db --restart unless-stopped postgres
    • 容器会随 Docker 服务启动而自动运行,除非手动停止。

注意事项

  1. 重启策略生效条件

    • 容器必须是通过 docker run 启动的。
    • 如果容器被 docker stopdocker rm 显式停止,unless-stopped 策略不会触发重启。
  2. 资源消耗风险

    • 避免为可能频繁崩溃的容器设置 always,可能导致系统资源耗尽。
  3. 查看当前策略

    bash 复制代码
    docker inspect <容器ID> --format='{{.HostConfig.RestartPolicy.Name}}'

完整命令示例

启动一个自动重启的 Redis 服务,并限制最大重启次数:

bash 复制代码
docker run -d \
  --name redis-server \
  --restart on-failure:10 \
  redis
  • 容器最多自动重启10次,若仍失败则停止。

通过合理配置 --restart,可以显著提升容器的健壮性和可用性。




以下是关于 Docker --restart 参数的详细说明,结合知识库中的信息整理而成:


1. 参数作用

--restartdocker run 命令中的一个选项,用于设置容器的重启策略 ,控制容器在退出后的自动重启行为。

Docker 守护进程会根据策略决定是否在容器退出时自动重启它。


2. 支持的策略类型

Docker 支持以下四种重启策略(来自知识库条目[1][4][7]):

策略 描述
no 默认策略。容器退出时,不会自动重启。
on-failure 容器退出状态码非 0 时自动重启。可指定最大重试次数(如 on-failure:3)。
always 无论退出状态码如何,容器退出时总会自动重启。
unless-stopped always 类似,但排除了一种情况:如果容器是通过 docker stopdocker restart 手动停止的,则不会自动重启。

3. 使用示例

(1) 启动容器时设置重启策略
bash 复制代码
# 使用 always 策略(总是重启)
docker run --restart=always -d nginx

# 使用 on-failure 策略并指定最大重试次数
docker run --restart=on-failure:3 -d my_app

# 使用 unless-stopped 策略
docker run --restart=unless-stopped -d mysql
(2) 修改已运行容器的重启策略

如果容器已经启动,可以通过 docker update 命令修改策略(来自知识库条目[1][2][4]):

bash 复制代码
# 将容器 my_container 的策略改为 always
docker update --restart=always my_container

4. 关键注意事项

  1. 适用场景

    • always:适用于需要持续运行的服务(如数据库、Web 服务器)。
    • on-failure:适用于需要避免因错误退出导致服务中断的场景(如应用崩溃)。
    • unless-stopped:适合希望容器始终保持运行,除非手动停止的情况。
  2. 限制条件(来自知识库条目[2][5][7]):

    • 需后台运行--restart 仅对 后台模式(-d) 的容器生效,不能与 --rm 参数同时使用。
    • 成功启动后生效:重启策略仅在容器成功启动(至少运行 10 秒)后生效,否则可能触发无限重启循环。
    • Docker 守护进程重启 :若 Docker 守护进程本身重启,所有设置了 alwaysunless-stopped 的容器会自动重启。
  3. 退出状态码

    • 0 :正常退出,不会触发 on-failure 策略。
    • 0 :表示异常退出,触发 on-failure 策略。
    • 特殊状态码(如 125126127)通常与容器启动失败相关,可能不会触发重启(需结合具体场景)。

5. 实际场景示例

场景 1:确保容器始终运行
bash 复制代码
# 启动 Nginx 容器并设置 always 策略
docker run --restart=always -d -p 80:80 --name webserver nginx
  • 即使主机重启或容器意外退出,Docker 会自动重启该容器。
场景 2:条件性重启
bash 复制代码
# 启动应用容器,仅在非正常退出时重启,最多尝试 3 次
docker run --restart=on-failure:3 -d my_app
  • 若容器因代码错误(状态码非 0)退出,会尝试重启最多 3 次。
场景 3:手动停止后不自动重启
bash 复制代码
# 使用 unless-stopped 策略
docker run --restart=unless-stopped -d mysql
  • 正常退出时会自动重启,但若手动执行 docker stop mysql,则即使 Docker 守护进程重启,容器也不会自动启动。

6. 验证策略设置

查看容器的重启策略
bash 复制代码
# 方法 1:通过 docker inspect
docker inspect --format='{{.HostConfig.RestartPolicy}}' <容器名/ID>

# 方法 2:通过 docker ps(显示简要信息)
docker ps --format "table {{.Names}}\t{{.Status}}\t{{.RestartStatus}}"

7. 其他相关命令

  • 停止容器

    bash 复制代码
    docker stop <容器名/ID>  # 平稳停止
    docker kill <容器名/ID>  # 强制停止(状态码非 0,可能触发 on-failure)
  • 删除容器

    bash 复制代码
    docker rm <容器名/ID>  # 需先停止容器
    docker rm -f <容器名/ID>  # 强制删除(即使正在运行)

总结

通过 --restart 参数,可以灵活控制容器的自动重启行为,确保关键服务的高可用性。根据实际需求选择策略,并注意其限制条件(如后台模式、状态码判断)。更多高级用法(如结合 docker-compose)可参考知识库中的配置示例。




docker run --restart 选项用于指定容器的重启策略,当容器退出时,Docker 守护进程会根据指定的策略来决定是否重启容器。这在保证容器持续运行、提高应用的可用性方面非常有用。以下是 --restart 支持的几种策略及其详细介绍:

no

  • 含义:默认策略,容器退出时,Docker 不会自动重启该容器。
  • 示例
bash 复制代码
docker run --restart=no nginx

on-failure[:max-retries]

  • 含义 :仅在容器以非零退出状态码退出时才会自动重启。可以选择性地指定 max-retries 参数,用于限制 Docker 尝试重启容器的最大次数。
  • 示例
bash 复制代码
# 容器以非零状态码退出时自动重启,最多尝试重启 3 次
docker run --restart=on-failure:3 nginx

always

  • 含义:无论容器以何种状态退出(正常退出或异常退出),Docker 都会自动重启该容器。即使 Docker 守护进程重启,之前处于运行状态的容器也会在守护进程启动后自动重启。
  • 示例
bash 复制代码
docker run --restart=always nginx

unless-stopped

  • 含义 :与 always 类似,无论容器以何种状态退出都会自动重启。不同之处在于,如果在 Docker 守护进程停止之前,用户手动停止了容器,那么在守护进程重启后,该容器不会自动重启。
  • 示例
bash 复制代码
docker run --restart=unless-stopped nginx

在实际应用中,你可以根据容器运行的应用特性和需求来选择合适的重启策略。例如,对于一些关键的服务,如数据库、Web 服务器等,可以选择 alwaysunless-stopped 策略,以确保服务的高可用性;对于一些一次性任务的容器,则可以选择 no 策略。




docker run 命令中的 --restart 选项用于指定容器的重启策略,确保容器在退出时能够按照指定的策略自动重启。以下是一些常用的重启策略及其说明:

常用的重启策略

策略 说明
no 默认值,表示容器退出时,Docker 不自动重启容器。
on-failure 当容器非正常退出时(退出状态码不为 0),Docker 会自动重启容器。
on-failure:n 当容器非正常退出时重启容器,并且最多重启 n 次。
always 无论容器退出状态如何,只要容器退出就自动重启。
unless-stopped 容器退出时自动重启,但不会重启那些 Docker 守护进程启动时已经停止的容器。

使用示例

  1. 总是重启容器

    bash 复制代码
    docker run --restart always nginx

    这会确保 Nginx 容器在退出后会自动重启。

  2. 仅在异常退出时重启

    bash 复制代码
    docker run --restart on-failure:3 nginx

    容器在非正常退出时最多重启 3 次。

  3. 除非手动停止,否则总是重启

    bash 复制代码
    docker run --restart unless-stopped nginx

    这种策略在生产环境中非常实用,因为它会自动重启容器,除非是手动停止的。

查看容器重启次数

可以使用以下命令查看容器的重启次数:

bash 复制代码
docker inspect -f "{{ .RestartCount }}" <container_id_or_name>

查看容器最后一次启动时间

可以使用以下命令查看容器最后一次的启动时间:

bash 复制代码
docker inspect -f "{{ .State.StartedAt }}" <container_id_or_name>

更新现有容器的重启策略

对于已经创建的容器,可以使用 docker update 命令来修改其重启策略:

bash 复制代码
docker update --restart unless-stopped <container_id_or_name>

这些策略和命令可以帮助你根据实际需求灵活地管理容器的重启行为,确保容器化应用的高可用性和稳定性。




docker run --restart 参数用于设置容器的重启策略。当容器因为某些原因停止运行时,Docker 可以根据这个策略自动重启容器。以下是 --restart 参数的几种设置方式及其含义:

--restart 参数的设置

  1. no(默认值)

    • 容器退出时不重启。
  2. on-failure

    • 当容器非正常退出(即退出状态码非0)时,会根据指定的次数尝试重启。
    • 可以与一个可选的重启次数参数一起使用,例如 --restart=on-failure:3,表示最多重启3次。
  3. always

    • 无论容器退出状态码是什么,总是尝试重启容器。
    • 即使 Docker 服务重启,也会自动重启该容器。
  4. unless-stopped

    • 类似于 always,但有一些例外:
      • 如果容器被手动停止(使用 docker stop),则不会自动重启。
      • 如果 Docker 服务重启,会自动重启该容器。

示例

  1. 总是重启容器

    bash 复制代码
    docker run --restart always --name my-container nginx
  2. 在失败时重启容器,最多重启3次

    bash 复制代码
    docker run --restart on-failure:3 --name my-container my-image
  3. 除非手动停止,否则总是重启容器

    bash 复制代码
    docker run --restart unless-stopped --name my-container my-image

注意事项

  • 设置 --restart 参数时,需要考虑业务需求和系统资源,避免因频繁重启导致资源浪费或服务不稳定。
  • 在生产环境中,合理配置重启策略可以提高系统的可用性和稳定性。

通过合理使用 --restart 参数,可以确保容器在遇到问题时能够自动恢复,从而提高系统的健壮性。




Docker的docker run --restart参数用于配置容器的自动重启策略。这个功能在容器意外退出时非常有用,可以帮助保持服务的持续可用性。以下是详细说明:


参数格式

bash 复制代码
docker run --restart <策略类型> [其他参数] <镜像名>

重启策略类型

  1. no(默认)

    • 不自动重启容器
    • 示例:docker run --restart no nginx
  2. on-failure[:max-retries]

    • 当容器以非0状态码退出时自动重启

    • 可选的:max-retries指定最大重试次数(需Docker 1.11+)

    • 示例:

      bash 复制代码
      docker run --restart on-failure:5 my-app
  3. always

    • 无条件自动重启(无论退出状态码如何)

    • 注意:如果容器被手动停止(docker stop),则不会自动重启

    • 示例:

      bash 复制代码
      docker run --restart always redis
  4. unless-stopped

    • 类似always,但排除手动停止的情况

    • 如果容器是手动停止的,即使Docker守护进程重启,容器也不会自动启动

    • 示例:

      bash 复制代码
      docker run --restart unless-stopped mysql

典型应用场景

  1. 关键服务保活

    使用alwaysunless-stopped确保数据库、Web服务器等高优先级服务持续运行。

  2. 调试任务

    对可能崩溃的调试程序使用on-failure策略,避免无限重启干扰日志分析。

  3. 定时任务容器

    对执行一次性任务的容器保持默认no策略。


注意事项

  1. 与Docker守护进程的关系

    自动重启策略依赖Docker守护进程(dockerd)的运行。若守护进程停止,所有重启策略将暂停,直到守护进程恢复。

  2. 手动停止优先级

    使用docker stop命令停止的容器会忽略always策略,但unless-stopped会记住最后一次停止状态。

  3. 无限重启风险

    如果容器因配置错误立即退出,可能触发重启循环。可通过docker inspect查看退出原因。


补充:在Docker Compose中配置

docker-compose.yml中通过restart字段指定策略:

yaml 复制代码
services:
  web:
    image: nginx
    restart: unless-stopped

通过合理选择重启策略,可以显著提升容器化服务的健壮性。建议根据实际需求选择最匹配的策略类型。




Docker run --restart 参数详解

一、重启策略类型及适用场景

--restart 参数用于定义容器退出时的自动重启策略,是 Docker 生产环境中管理容器稳定性的重要选项。以下是支持的策略类型及说明:

  1. no

    默认策略 ,容器退出时 不自动重启

    • 适用场景:临时测试容器或需手动控制的场景。

    • 示例:docker run --restart=no nginx

  2. on-failure[:max-retries]

    异常退出时重启 :仅在容器以 非0状态码退出 时触发重启(如程序崩溃)。

    • 可指定最大重试次数(如 on-failure:3),超过次数则放弃重启。

    • 适用场景:需自动恢复关键服务但避免无限重启的故障场景。

    • 示例:docker run --restart=on-failure:5 myapp

  3. always

    无条件重启 :无论退出状态码如何,容器退出后 总是自动重启 (包括手动停止后重启 Docker 守护进程的情况)。

    • 注意:若宿主机重启,容器会在 Docker 服务启动后自动重启。

    • 适用场景:需长期运行且需高可用的服务(如 Web 服务器)。

    • 示例:docker run -d --restart=always mysql

  4. unless-stopped

    智能重启 :容器退出时自动重启,但 排除手动停止的情况 (若手动停止容器后重启 Docker 守护进程,该容器不会自动启动)。

    • 适用场景:需自动恢复服务,但允许手动干预停止的场景。

    • 示例:docker run --restart=unless-stopped redis


二、退出状态码与策略关联

Docker 根据容器的 退出状态码 决定是否触发重启策略:

0 :正常退出,仅 alwaysunless-stopped 会重启。

非0 :异常退出,触发 on-failurealways/unless-stopped 策略。

特殊状态码

125 :Docker 守护进程自身错误(如镜像不存在)。

126 :容器启动命令无法执行。

127:启动命令不存在。


三、配置方法与操作示例
  1. 启动时指定策略

    bash 复制代码
    docker run -d --restart=always --name=my_nginx nginx
  2. 更新已运行容器的策略

    若容器未设置 --restart,可通过 docker update 修改:

    bash 复制代码
    docker update --restart=unless-stopped my_nginx
  3. 查看重启状态

    • 查看重启次数:docker inspect -f "{``{ .RestartCount }}" my_nginx

    • 查看最后一次启动时间:docker inspect -f "{``{ .State.StartedAt }}" my_nginx


四、注意事项
  1. --rm 的冲突--restart 不能与 --rm(退出后自动删除容器)同时使用。
  2. 资源限制 :频繁重启可能占用过多资源,建议配合 --memory--cpus 限制资源。
  3. 日志监控 :长期运行容器需监控日志,避免因无限重启导致日志堆积(可通过 --log-opt 限制日志大小)。

五、典型场景对比
场景 推荐策略 理由
数据库服务(如 MySQL) always 需持续运行,即使宿主机重启也需自动恢复
批处理任务 on-failure:3 任务失败时重试,但避免无限循环
开发环境临时容器 no 手动控制生命周期,避免干扰开发流程
需手动干预的后台服务 unless-stopped 自动恢复服务,同时允许手动停止

通过合理配置 --restart,可显著提升容器服务的可靠性。建议结合监控工具(如 Prometheus)进一步优化运维流程。




Docker 的 --restart 参数用于设置容器的自动重启策略,控制容器在退出或 Docker 守护进程重启时的行为。以下是详细说明:


可用策略

  1. no(默认)

    容器退出时不自动重启,且 Docker 守护进程重启时也不会启动容器。

  2. always

    容器退出时总是重启,并且 Docker 守护进程重启时也会启动容器。

    bash 复制代码
    docker run --restart always -d nginx
  3. unless-stopped

    类似 always,但若容器被手动停止过,则即使 Docker 重启也不会自动启动。

    bash 复制代码
    docker run --restart unless-stopped -d mysql
  4. on-failure

    仅当容器退出码非 0(即异常退出)时重启。可指定最大重试次数(可选)。

    bash 复制代码
    # 退出码非0时最多重启3次
    docker run --restart on-failure:3 -d my-app

注意事项

  • 策略仅对容器退出Docker 守护进程重启时生效,不适用于手动停止的容器。

  • 若容器通过 --rm 参数运行,--restart 将被忽略。

  • 已运行容器可通过 docker update 修改重启策略:

    bash 复制代码
    docker update --restart=always 容器ID/名称

示例

  • 关键服务(如数据库)自动恢复

    bash 复制代码
    docker run --restart unless-stopped -d postgres
  • 仅在失败时重启

    bash 复制代码
    docker run --restart on-failure:5 -d my-flaky-service

需要进一步解释或具体场景的应用吗?







docker的run命令 笔记250406







相关推荐
24白菜头2 小时前
C和C++(list)的链表初步
c语言·数据结构·c++·笔记·算法·链表
小军要奋进3 小时前
httpx模块的使用
笔记·爬虫·python·学习·httpx
三阶码叟3 小时前
centos7 yum install docker 安装错误
运维·docker·容器
齐尹秦4 小时前
CSS Id 和 Class 选择器学习笔记
css·笔记·学习
小雨凉如水4 小时前
docker 常用命令
java·docker·eureka
CaliXz4 小时前
野草云防火墙风险分析及 Docker 使用注意事项
运维·docker·容器
计算机学无涯4 小时前
Docker 命令简写配置
运维·docker·容器
黎明鱼儿4 小时前
基于 docker 的 Xinference 全流程部署指南
docker·容器·大模型·nlp·xinference
kk小源4 小时前
Docker常用操作教程
运维·docker·容器