【问题标题】:Is the FROM image layer included in my image我的图像中是否包含 FROM 图像层
【发布时间】:2019-08-13 21:16:30
【问题描述】:

我有一个 Dockerfile:

FROM baseimage

RUN <do stuff>

我在本地有一个baseimage,但它在 Docker Hub 上不可用。我使用上面的 Dockerfile 构建 myimage 并将 myimage 推送到 Docker Hub。

我的问题是:myimage 是否包含 baseimage

还假设其他用户拉myimage。他在本地没有baseimage。他能成功拉myimage跑吗?

我遇到的实际问题是 pull myimage 对其他用户失败:

get https://registry-1.docker.io/v2/<BASEIMAGE>: unauthorized: incorrect username or password

尽管事先明确运行

docker login -u <USER> https://registry-1.docker.io/
Password: 
Login Succeeded
docker login https://registry-1.docker.io/v2/<ORG>/<BASEIMAGE>/manifests/<BASEIMAGE>
Authenticating with existing credentials...
Login Succeeded

我认为对于私有图像,包括baseimage 在内的所有层都可以在myimage 获得。

【问题讨论】:

  • 不,它没有。它的力量是在不同的构建之间共享基础图像。抱歉,我不知道私人回购的详细信息。

标签: docker dockerhub docker-image docker-build


【解决方案1】:

图像只是一堆层。当您在 dockerfile 中有 FROM 时,构建过程将通过在 FROM 映像的层之上添加层来启动新映像。

一旦你推送一个图像,它会推送这个图像的所有层,包括基础图像中的层。

当您拉取图像时,它将下载本地不存在的所有层以及说明如何堆叠它们的清单。

【讨论】:

  • 我也是这么想的。但显然myimage 不提供baseimage 层。或者至少用户无法拉动它。有没有办法让我进一步调查?我检查了镜像层的大小,根据 docker hub 和 docker history 的大小,baseimage 确实不包括在内(baseimage 是 1Gb,docker history 显示 myimage 层是 680 Mb + 1Gb baseimage layer,Dockerhub 显示 myimage为 680 Mb)。
  • 当你运行docker pull /docker push你有图层列表,你可以检查列表是否不同。
猜你喜欢
  • 2021-10-30
  • 2014-02-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多