如何让 docker-compose 始终从新镜像重新创建容器?

2023-11-30

我的 Docker 镜像构建在 Jenkins CI 服务器上,并推送到我们的私有 Docker 注册表。我的目标是使用 docker-compose 配置环境,该环境始终启动图像的原始构建状态。

我目前在不同的机器上使用 docker-compose 1.3.2 和 1.4.0,但我们之前也使用过旧版本。

我一直用的是docker-compose pull && docker-compose up -d命令从注册表中获取新映像并启动它们。我相信我的首选行为在某个时间点上按预期工作,但从那时起docker-compose up开始重新运行之前停止的容器,而不是每次都启动最初构建的镜像。

有没有办法摆脱这种行为?这种方式是否可以在 docker-compose.yml 配置文件中连接,以便在每次调用时不依赖“不忘记”命令行上的某些内容?

附注除了找到实现目标的方法之外,我还想更多地了解这种行为的背景。我认为Docker的基本思想是构建一个不可变的基础设施。 docker-compose 当前的行为似乎与这种方法完全冲突..还是我在这里错过了一些要点?


docker-compose up --force-recreate是一种选择,但如果你将它用于 CI,我会开始构建docker-compose rm -f停止并移除容器和卷(然后按拉动和向上操作)。

这就是我使用的:

docker-compose rm -f
docker-compose pull
docker-compose up --build -d
# Run some tests
./tests
docker-compose stop -t 1

重新创建容器的原因是为了保留可能使用的任何数据卷(并且它也恰好使up快很多)。

如果你正在做 CI,你不希望这样,所以只需删除所有内容就可以得到你想要的。

更新:使用up --build添加到docker-compose 1.7

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何让 docker-compose 始终从新镜像重新创建容器? 的相关文章

随机推荐

  • C# 合并运算符

    为什么下面的代码返回 false public static void Main bool someCondition true bool someConditionOverride false bool result someCondit
  • 在 Android 上将 UTC 转换为本地时间

    在我的项目中 我获得了 json 格式的 API 响应 我得到一个 UTC 时间格式的时间字符串值 如下所示Jul 16 2013 12 08 59 AM 我需要将其更改为当地时间 这就是我们使用此应用程序时需要显示当地时间的地方 我该如何
  • 如何确保修改 .h 文件时,包含该文件的 .cc 文件会在使用 Visual Studio 2008 的发布版本中自动编译?

    假设我的 Visual Studio 2008 项目中有 a h a cc 和 b cc a cc 和 b cc 都包含 a h 当我修改 a h 并构建项目时 a cc 和 b cc 在调试版本中进行编译 然而 在发布版本中情况并非如此
  • 虚函数效率和“final”关键字

    考虑一个有类的程序Foo包含一个函数Foo fn声明如下 virtual void fn 和一个子类Foo called Bar 将会声明Bar fn像这样 virtual void fn override final 导致呼叫fn in
  • 找不到导入tuneup.js文件

    使用 Xcode iOS Instruments UI Automationtunup js javascript 库https github com alexvollmer tuneup js 我在理解我启动的仪器的当前工作目录方面遇到了
  • 更新自定义字段结束于无限循环

    我在 AR 发票和备忘录 屏幕 ID AR301000 中有一个对应 AP 参考的自定义字段 Nbr 在类似的管理器中 AP 账单和调整 屏幕 ID AP301000 中的另一个自定义字段对应于相应的 AR 参考 Nbr 我正在尝试更新 A
  • 如何在 C# 中从数据库检索时将 varBinary 转换为图像或视频

    我正在使用 Visual Studio 2010 桌面应用程序 并使用 LINQ to SQL 将图像 视频或音频文件保存到 dataType 中的数据库VarBinary MAX 我可以做到这一点 问题是 我无法获取它们并在 xaml 中
  • 使用VBS下载文件

    我有一个 VBS 脚本 可以生成一个 URL 以从网络上的服务器下载文件 我现在需要将文件下载到 C rWallpaper wallpaper png URL 存储在变量中 url 我希望它能像 Linux 上的 wget 一样工作 只需下
  • JVM的LookupSwitch和TableSwitch有什么区别?

    我很难理解 Java 字节码中的 LookUpSwitch 和 TableSwitch 如果我理解得好的话 LookUpSwitch 和 TableSwitch 都对应于switchJava 源代码声明 为什么一条 JAVA 语句会生成 2
  • 为什么这里没有生成 Coredump 文件?

    我这里遇到一种情况 几天前我能够在目标板上看到核心转储文件 我通过在 etc profile 中添加 ulimit c unlimited 来启用核心转储生成 但后来有人告诉我 这会only对从登录 shell 启动的程序有效 对由以下命令
  • Hibernate 拦截器 - 加载事件之后

    实体加载后是否发生任何事件 我的目标是将这个实体添加到 Solr 或 Lucene 索引中 EmptyInterceptor OnLoad 事件发生在对象初始化之前 我想在设置对象属性后处理事件 是否可以使用 Hibernate 拦截器或其
  • Java - 使用 catch 块内的方法返回语句并引发异常?

    我有以下代码 使用 hibernate 在错误时引发自定义异常 并且我还想在这种情况下关闭会话 因为除非在客户端计算机上接收到 否则不会捕获异常 public
  • 如何将 Google 表格文件转换为 Excel 文件 (XLSX)

    The image shows the code who is updated var xlsFile 未定义 为什么 如何使用 Google Sheets 脚本编辑器将 Google Sheets 文件转换为 Excel 文件 funct
  • 无效签名错误!

    我正在尝试更新我的应用程序 但上传二进制文件后 Itunes connect 向我发送了以下电子邮件 尊敬的开发者 感谢您的 最近提交的 我的应用程序 的二进制文件 到应用商店 不幸的是我们 发现您的二进制文件存在问题 您需要按顺序更正 以
  • SVG 中的单击事件坐标

    该 HTML 包含 SVG div class container div class spacer div div
  • 使用 grep 获取每行匹配后的下一个 WORD

    我想得到 GET 来自我的服务器日志的查询 例如 这是服务器日志 1 0 0 127 in addr arpa 10 Jun 2012 15 32 27 code 404 message File not fo 1 0 0 127 in a
  • Emacs:如何绑定敲击两次的键?

    我正在使用 Emacs 23 并且我正在绑定C 功能的组合键 global set key kbd C myfunction 是否可以绑定快速 双击 按键 例如我想调用一个函数myfunction打字时 很快两次 没有任何内置内容 但您可以
  • 在 QtableView 中添加复选框作为垂直标题

    我试图拥有一个 QTableView 复选框 因此我可以使用它们进行行选择 我已经设法做到了这一点 现在我希望标题本身成为复选框 以便我可以选中 取消选中 All 或 any row 我已经找了好几天了 但没能做到 我尝试对模型使用 set
  • wpf - 验证 - 如何显示工具提示并禁用“运行”按钮

    你好 我需要验证应用程序中的一些文本框 我决定使用验证规则 数据错误验证规则 这就是为什么在我的类中我实现了 IDataErrorInfo 接口并编写了适当的函数 在我的 xaml 代码中 我向文本框添加了绑定和验证规则
  • 如何让 docker-compose 始终从新镜像重新创建容器?

    我的 Docker 镜像构建在 Jenkins CI 服务器上 并推送到我们的私有 Docker 注册表 我的目标是使用 docker compose 配置环境 该环境始终启动图像的原始构建状态 我目前在不同的机器上使用 docker co