【问题标题】:docker-compose keeps using old image contentdocker-compose 继续使用旧图像内容
【发布时间】:2017-11-11 15:54:46
【问题描述】:

我们使用 gitlab-ci 使用最新版本的代码构建新图像。 这些图像是使用latest 标签每天构建的。 我们在发布过程中标记图像。

我的问题与latest 标签有关。 我们会在服务器上自动部署这些图像以测试我们的产品。

但是,在测试服务器上,如果我们拉取最新的 docker 镜像(通过其校验和验证),停止 compose 并再次启动它,有时我们仍然拥有旧镜像的内容(例如配置文件)。

我们尝试使用docker-compose up -d --force-recreate,但没有帮助。

修复它的唯一方法是: docker-compose down docker system prune -f docker rmi $(docker images -q) docker-compose pull docker-compose up -d

有更好的主意吗?

【问题讨论】:

    标签: caching docker docker-compose


    【解决方案1】:

    根据文档,您可以使用以下命令忽略上一卷中的数据:

    docker-compose up -d --force-recreate --renew-anon-volumes

    https://docs.docker.com/compose/reference/up/

    【讨论】:

      【解决方案2】:

      我在开发中也遇到了这个问题。 docker-compose up 使用旧图像,即使我已经构建了最新图像。如果我在最新图像中手动运行 docker run,我可以看到新的变化。 为我解决的问题正在运行:

      docker-compose up --build <your-service>

      希望对你有帮助!

      【讨论】:

      • 是的,这正是我想要的。 docker-compose up -d --build serviceX serviceY。这将允许您有选择地更新和启动服务及其依赖项。
      • 这解决了我的问题,谢谢!!
      【解决方案3】:

      流程应该是:

      docker-compose pull
      docker-compose up
      

      如果您有卷,那么这些卷将在设计上保持不变。如果您需要您的卷不持久,那么您可能需要重新考虑将该数据放在一个卷中,或者您需要在每次重新部署时使用docker-compose down -v 重置卷以删除容器 音量。

      如果您对此仍有疑问,请确保您安装的 docker 和 docker-compose 是最新的。

      【讨论】:

      • 谢谢@BMitch,我知道 docker 是如何工作的。正如我在之前的消息中所解释的,图像已正确拉出。未很好更新的文件不在安装的卷中,即使某些卷在其他地方链接到此容器。
      • @David 你能用mcve 更新你的问题,以便其他人可以尝试重现你的问题吗?
      【解决方案4】:

      你可以试试

      docker-compose down --rmi all
      

      https://docs.docker.com/engine/reference/commandline/compose_down/

      【讨论】:

      • 请在您的答案中添加一些解释,以便其他人可以从中学习
      猜你喜欢
      • 2018-01-31
      • 1970-01-01
      • 2018-05-16
      • 1970-01-01
      • 2018-02-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多