我想要的

我有一个不再构建的Dockerfile,因为它的一些初始构建步骤依赖于不再可用的服务,因此进行反向工程很痛苦。整个过程将很快被重写,但是现在我只想使用包含问题步骤的图层中的修复程序来重建图像。

我的Dockerfile看起来像这样:

FROM ubuntu:14.04
RUN this_thing_that_breaks
RUN apt-get install etc
COPY blah

我本质上想将第3层用作基础层,并在此基础上构建。

我做了什么
  • 从回购中提取工作图像:docker pull ecr/my-image:cache
  • docker build --cache-from ecr/my-image:cache -t ecr/my-image:fix .

  • 此时,我希望构建可以使用:cache的现有层来构建:fix,但是我的构建从头开始,但失败了。

    This layer explanation post似乎说过,在1.10之后,docker镜像将其所有层作为一个整体交付,这些层实际上不再可访问。
    但是,当我查看docker inspect ecr/my-image:cache时,我看到了一大堆图层的sha256 id。这再次让我认为应该有一种方法指向一个特定的层,并将其用作缓存的基础。

    给定层的sha256 ID列表,是否可以构建docker镜像?

    修复此问题后,我打算对此进行核对,因此在这里不需要优雅。

    额外信息
    $ docker version
    Version:           18.09.1
    API version:       1.39
    OS/Arch:           darwin/amd64
    
    $ sw_vers
    ProductName:    Mac OS X
    ProductVersion: 10.14.1
    

    最佳答案

    要将图像的特定层用作其他图像的基础,可以在FROM指令中直接使用该层的SHA256哈希。

    例如,假设您有此Dockerfile

    FROM ubuntu:14.04
    RUN this_thing_that_breaks
    RUN apt-get install etc
    COPY blah
    

    并且已经具有从该Dockerfile成功构建的镜像(当时this_thing_that_breaks起作用)。 RUN this_thing_that_breaks最近停止工作,我们现在无法构建镜像。

    假设已构建的图像被标记为my-image:cache。要找到要断开的确切图层的SHA256 ID,请运行docker history my-image:cache并记下SHA256 ID(此处对应于RUN this_thing_that_breaks的那个)。

    假设记录下来的SHA256 ID是066a73a3a0c4。现在,删除RUN this_thing_that_breaks之前的所有说明,并将其替换为FROM 066a73a3a0c4
    FROM 066a73a3a0c4
    RUN apt-get install etc
    COPY blah
    

    现在,使用my-image:fix构建新图像docker build --cache-from my-image:cache -t my-image:fix .。现在,这应该使用已经缓存为创建新镜像的基础镜像的特定中断层。

    希望这可以帮助!

    上一个答案:

    不使用缓存的原因可能是ubuntu:14.04中的ecr/my-image:cache图像和本地缓存的ubuntu:14.04图像与此处描述的不同:

    https://github.com/moby/moby/issues/26065#issuecomment-249046559



    因此,我看到的一种选择是使用ubuntu:14.04删除本地缓存的docker rmi ubuntu:14.04,然后运行docker build --cache-from ecr/my-image:cache -t ecr/my-image:fix

    我希望这能奏效,但我尚未确认。如果这不起作用,建议您检查this issue并检查其中提到的选项。

    关于docker - 从特定的图像层构建docker图像,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54413239/

    10-16 22:37
    查看更多