当前位置: 首页 > news >正文

Docker compose 使用 --force-recreate --no-recreate 控制重启容器时的行为

一、--force-recreate

作用

  • 强制重新创建指定的服务,即使服务的配置未发生任何变化。
  • 忽略现有容器的状态,无论容器是停止、运行还是有无变化,都会销毁并重新创建。

用法

docker compose up -d --force-recreate [services...]
  • 不指定服务:对配置文件中的所有服务生效。
  • 指定服务:仅对指定的服务生效。

常用场景

docker compose up -d --force-recreate
  1. 更新镜像后重建:当服务镜像更新(如新版本推送)时,强制重新创建以应用最新镜像。
  2. 修复错误状态的容器:当容器状态异常(如配置未变但容器行为不正常)时,强制重建容器恢复正常。

注意事项

  • 会销毁现有容器,因此容器中的非持久化数据会丢失。
  • 与服务未变化无关,强制生效,可能会增加不必要的重建时间。

二、--no-recreate

作用

  • 防止重新创建已存在的容器。
  • 如果容器已经存在且处于任何状态(停止或运行),Docker Compose 会跳过创建,直接启动该容器。

用法

docker compose up -d --no-recreate [services...]
  • 不指定服务:对配置文件中的所有服务生效。
  • 指定服务:仅对指定的服务生效。

常用场景

docker compose up -d --no-recreate
  1. 跳过已有容器:不改变已存在的服务容器,仅启动未运行的服务。
  2. 防止干扰运行中的服务:确保运行中的服务不被重新创建,以保持服务稳定性。

注意事项

  • 如果容器不存在,则会创建新的容器。
  • 无法更新已有容器,即使镜像发生变化也不会重建。

三、区别

特性--force-recreate--no-recreate
强制重建
作用范围配置中的所有或指定服务配置中的所有或指定服务
处理已存在容器无条件重建(即使未改变)跳过(即使配置已改变)
新增容器创建并强制覆盖创建但不覆盖

四、配合使用

目的

通过组合 --force-recreate--no-recreate,实现对服务的精细化控制,例如对部分服务强制重建,对其他服务保持不变。

常用场景

1. 避免干扰特定服务
  • 只重建部分服务,其他服务保持不变:
docker compose up -d --no-recreate service-A
docker compose up -d --force-recreate
  • 效果
    • service-A 不被重建。
    • 配置中的其他服务强制重建。
2. 控制重建顺序
  • 先确保某服务不被重建,随后对其他服务强制重建:
docker compose up -d --no-recreate service-B
docker compose up -d --force-recreate
  • 效果
    • service-B 不会重建,但仍会启动(若未运行)。
    • 配置中的其他服务被强制重建。

五、注意事项

  1. 范围冲突

    • 如果同时指定服务和不指定服务,可能出现覆盖范围冲突。应避免混淆参数使用。
    • 示例:以下命令中,my-service 仍会被重建,因为 --force-recreate 优先生效:
docker compose up -d --no-recreate my-service
docker compose up -d --force-recreate
  1. 数据丢失

    • 使用 --force-recreate 时,非持久化数据会丢失,因此确保重要数据已经挂载为持久存储。
  2. 资源消耗

    • 强制重建可能带来额外的系统资源消耗,尤其是在大量服务或镜像拉取的情况下。
  3. 服务依赖关系

    • 如果某些服务存在依赖关系(如数据库),应确保关键服务(如数据库)不被强制重建,以免造成服务中断。

六、总结

  • --force-recreate:用于强制重建所有或指定的服务,无论状态如何。适合需要重建更新或修复错误的场景。
  • --no-recreate:用于避免对已有服务的干扰,仅启动未运行的服务。适合保持服务稳定的场景。
  • 组合使用:通过分步执行,可以实现对服务的精细控制,适用于复杂多服务的场景。


七、以上总结来源于讨论,过程记录如下:

Docker compose 使用 --force-recreate --no-recreate 控制重启容器时的行为【后续】



http://www.mrgr.cn/news/83255.html

相关文章:

  • 模拟(典型算法思想)—— OJ例题算法解析思路
  • 使用Qt+opencv实现游戏辅助点击工具-以阴阳师为例
  • Linux:网络编程套接字及UDP
  • 解决bad SQL grammar []; nested exception is java.sql.SQLSyntaxErrorException
  • Hive之数据操作DML
  • 使用Jenkins实现鸿蒙HAR应用的自动化构建打包
  • Python 的网页自动化工具 DrissionPage 介绍
  • 互联网架构变迁:从 TCP/IP “呼叫” 到 NDN “内容分发” 的逐浪之旅
  • 【没能解决】虚拟机不能进入图形界面问题
  • 安卓硬件加速hwui
  • js实现一个可以自动重链的websocket客户端
  • 【ASP.NET学习】ASP.NET MVC基本编程
  • LSKNet 训练测试 (在容器实例中)
  • 数值分析速成复习笔记
  • 【STM32】无源蜂鸣器播放音乐《千与千寻》,HAL库
  • QThread多线程详解
  • Android原生开发同一局域网内利用socket通信进行数据传输
  • 金山WPS Android面试题及参考答案
  • G1垃圾回收器的FullGC
  • SpringBoot3集成案例
  • 时频分析之S变换
  • 开源生成式物理引擎Genesis,可模拟世界万物
  • React中createRoot函数原理解读——Element对象与Fiber对象、FiberRootNode与HostRootNode
  • open3d+win10+vs2019环境安装配置及测试
  • YangQG 面试题汇总
  • 面向对象分析与设计Python版 分析与设计概述