如何解决dockerfile复制指令:“ in”一词的作用是什么?
在hello-world Docker映像的映像历史记录中,有一行:
COPY文件:7bf12aab75c3867a023fe3b8bd6d113d43a4fcc415f3cc27cbcf0fff37b65a02 中 /
(您也可以在此页面上看到以下行:https://github.com/docker-library/repo-info/blob/master/repos/hello-world/remote/linux.md)
“ 在”一词的含义是什么?我没有在https://docs.docker.com/engine/reference/builder/#copy
中看到“中”解决方法
docker image history
的输出与用于创建它的Dockerfile的语法不同。
为说明起见,我使用Go创建了一个静态链接的“ Hello,world”程序,并创建了一个小的Dockerfile,如下所示:
FROM scratch
COPY hello /
CMD ["/hello"]
让我们构建Docker映像。
$ docker build -t tmp_copy .
Sending build context to Docker daemon 13.15MB
Step 1/3 : FROM scratch
--->
Step 2/3 : COPY hello /
---> Using cache
---> bfccb234abde
Step 3/3 : CMD ["/hello"]
---> Using cache
---> 96121e4a4504
Successfully built 96121e4a4504
Successfully tagged tmp_copy:latest
现在我们可以运行它:
$ docker run tmp_copy
Hello,world.
好的。现在让我们看一下Docker镜像历史记录的输出,没有截断:
$ docker image history --no-trunc tmp_copy
IMAGE CREATED CREATED BY SIZE COMMENT
sha256:96121e4a450418af93dbae993234a62868f0ce504e6884bcdfc6228dcaa3656d 15 minutes ago /bin/sh -c #(nop) CMD ["/hello"] 0B
sha256:bfccb234abdec088ccab38822c3e047c5f5e4e410f5db77db7f19a0d8f76c6df 15 minutes ago /bin/sh -c #(nop) COPY file:ba2740c89a3e5e31ef2669cc67fccde9458c750e1f82bf1181dfe8f5ffdd827d in / 558kB
在in /
栏中有我们好奇的CREATED BY
。我们这里有两个图像层,都由它们自己的哈希标识。它们都与上面docker build
命令的输出中的截断的哈希值匹配。
我们可以看到Dockerfile中的指令已被解析,并在历史记录输出中以略有不同的形式重写了。 file:<hash>
部分似乎已添加到Docker copy module的copyInfoForFile
函数中。
如果将输出复制到Dockerfile中并尝试运行它,则会得到以下内容:
$ docker build -t tmp_copy2 .
Sending build context to Docker daemon 13.15MB
Step 1/3 : FROM scratch
--->
Step 2/3 : COPY file:ba2740c89a3e5e31ef2669cc67fccde9458c750e1f82bf1181dfe8f5ffdd827d in /
COPY failed: stat /var/lib/docker/tmp/docker-builder853347951/file:ba2740c89a3e5e31ef2669cc67fccde9458c750e1f82bf1181dfe8f5ffdd827d: no such file or directory
那么它从哪里来?我们可以看到复制命令的“ comment”字段中的format string包括神秘的in
。
该层配置的Cmd
字段中的comment is then stored以及我们在历史记录输出中看到的#(nop)
。
因此,似乎此输出仅供参考,而不是原始Dockerfile命令的准确记录。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。