【发布时间】:2021-05-02 10:51:26
【问题描述】:
我们有一个构建管道,它首先使用 dockerfile 进行 docker 构建。该 dockerfile 有许多 COPY 命令。我们还有一个后续步骤,使用 'cp' 命令执行 docker run,如下所示:
docker run --volume /hostDirA:/containerDirB --workdir /folderB dockerRepo:somebuildnum cp -R /hostDirC/. /containerDirB
首先,在重点之前,我的理解是 cp 命令正在从一个文件夹复制到另一个文件夹,这两个文件夹都是容器上的。这样理解正确吗?
第二,当 COPY 已经通过 dockerfile 在 docker build 中完成时,为什么要在 docker run 中以这种方式完成 cp?我们不将这个 cp 移到 dockerfile 中是否有正当理由?
【问题讨论】:
-
HostDirA 和 HostDirC 如何相互关联?如果一个在另一个之下,你需要证明这一点。你的 Dockerfile 中还有其他 VOLUME 规范吗?
-
COPY适用于创建新图层。cp适用于将内容从容器复制到卷上。需要明确的是,docker run cp不会创建新层。因此,它不能替代COPY指令。 -
如果
containerDirB的路径中有一个符号链接,应该让它落在一个卷上,这也会更有意义。 -
也就是说,“为什么这个预先存在的代码是这样写的?”问题通常要求我们成为读心者,这就是其中之一。有时会有额外的情况(例如上面提到的符号链接的可能性)。有时写它的人只是犯了一个错误。弄清楚哪个需要调查上下文——
cp发生的代码依赖,它是如何以及何时被调用的,它是否真的按预期工作? -- 这不适合我们的格式。 -
你能稍微澄清一下目录名称吗?如果
cp源文件夹来自图像(不是主机目录),其目标文件夹是第二个--volume目录,那么这似乎是在尝试将数据从构建到主机的图像中复制出来。
标签: docker dockerfile docker-build docker-run