【问题标题】:How to force docker-compose to download a new image when using docker hub?使用 docker hub 时如何强制 docker-compose 下载新图像?
【发布时间】:2019-05-07 22:24:15
【问题描述】:

我有一个 docker-compose.yml 文件,它从 docker hub 获取图像 svka4019/notes2:latest。 但是,如果我更改图像构建它并推送它,当我运行 docker-compose 时,它​​只会使用它之前已经下载的那个。 这是 docker-compose.yml:

springboot-docker-compose-app-container: 
    image: svka4019/notes2:latest
    ports:
      - "80:5001"
    depends_on:
    - friendservice
    networks:
    - mynet
    container_name: base_notes
  friendservice:
    build: ./Pirmas
    command: python app.py
    ports:
    - 5000:5000
    container_name: friend
    networks:
    - mynet
    
networks:
    mynet:

还有我用于构建和运行的命令:docker-compose up --build -d。 为了更新 docker-hub 中的图像,我使用:

docker build -t svka4019/notes2
docker push svka4019/notes2

如果我将方法用作无缓存,它只会重建friendService 容器并跳过基础容器。

【问题讨论】:

  • 可以尝试使用 docker image rm image_name 删除镜像
  • latest 非常混乱。它只是一个字符串,没有任何特定的功能。把它想象成foo。即使您正在重建映像,当 docker-compose 运行时,它也会查找x:latest,在本地找到它(不检查它是否与发布到注册表的内容不同)并继续。更好的方法可能是在修改版本时更改标签,或者更好地使用图像清单 (sha256:....),因为这明确引用了图像的唯一版本,并且(很可能)每次更改图像时都会更改。
  • @DazWilkin 你能举个例子来说明如何使用清单而不是 image:tag 吗?
  • docker push ...[[username]]/[[repo]]:[[tag]],如果成功,输出[[tag]]: digest: sha256:[digest]] size: [[size]。其他注册表(dockerhub 的 UI 似乎不提供此功能)允许您列出存储库|图像的摘要。使用 dockerhub,要检索摘要值,您需要例如docker pull [[username]]/[[repo]]:[[tag]],如果成功,它将报告Digest: sha256:[[digest]][[digest]](32 个十六进制字符 == 256 位)是您需要的值。您在 [[repo]] 之后引用它 [[username]]/[[repo]]@sha256:[[digest]] NB @ 而不是 :

标签: docker docker-compose dockerhub


【解决方案1】:

正如@DazWilkin 在 cmets 中指出的那样,应谨慎使用 latest 标签。如果 latest 带有 BC 中断,它不仅会在您的应用程序中引入错误,而且如果您已经有一个“最新”图像,它也不表示必须在您的计算机上执行新的更新。

在你的情况下,如果你想继续使用最新的,你必须做的就是简单地调用:

docker-compose pull

如果您正在构建自己的图像,那么您必须这样做:

docker-compose build --pull

后者会告诉 docker-compose 在构建自定义镜像之前先拉取基础镜像。

【讨论】:

  • 如果我想使用 docker-compose up 命令,我唯一的选择是“docker-compose pull && docker-compose up --build -d”吗?
  • afaik 是的。例如,我们为我们的一个项目所做的就是跟踪最后一次拉动完成的时间,并且系统会为用户执行此操作。但是你需要在两者之间编写一些脚本,比如通过 Makefile 或自定义 shell 脚本。
猜你喜欢
  • 1970-01-01
  • 2019-06-24
  • 1970-01-01
  • 1970-01-01
  • 2022-10-08
  • 1970-01-01
  • 2021-06-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多