COPY 和 ADD 在 Dockerfile 中不起作用

COPY and ADD not working in Dockerfile

我们有一个 docker 文件作为

FROM bitnami/tomcat

EXPOSE 8080
EXPOSE 8009

ADD values.war /opt/bitnami/tomcat/data/

除了 values.war 文件似乎从未被添加,当我们

docker exec -it values /bin/bash

并检查 /opt/bitnami/tomcat/data/ 目录 war 文件没有被复制。

但是我们尝试了以下操作,当我们连接到 docker 容器时,文件被复制了

FROM bitnami/tomcat

EXPOSE 8080
EXPOSE 8009

RUN mkdir -p /var/app
ADD values.war /var/app

因此我们认为问题出在目录上,因此我们尝试了以下操作

FROM bitnami/tomcat

EXPOSE 8080
EXPOSE 8009

RUN ls -l /opt/bitnami/tomcat/data/

给出了输出

ls: cannot access /opt/bitnami/tomcat/data/: No such file or directory

构建图像时

我们认为问题是因为 FROM 图像 bitnami/tomcat 将该目录用作卷等。这可能是原始 bitnami/tomcat 图片的代码,但我们不确定。

https://github.com/bitnami/bitnami-docker-tomcat/blob/master/9.0/Dockerfile

关于如何将文件添加到 tomcat 目录的任何想法

这是在 Dockerfile 中定义卷的缺点之一,也是 I don't recommend defining them there 的原因。 docker 的行为在您尝试在构建期间修改卷中的文件时未定义,它可能取决于您的 docker 版本或其他外部变量,因此为了可移植性,最好的办法是不要这样做它。

由于您使用的是另一方的图片,我会向他们提出问题以删除该行(请随时将他们指向我的博客 post 以获取解释)。在此之前,您可以签出 their build files from github 并更改 Dockerfile 以构建您自己的基础映像版本。

供参考,这是关于 defining a volume in the Dockerfile from docker's docs 的注释之一(说快 3 倍):

Changing the volume from within the Dockerfile: If any build steps change the data within the volume after it has been declared, those changes will be discarded.

来自 Bitnami 的 Sameer。

问题确实出在 Dockerfile 中定义的 VOLUME。我们认识到这是我们的 Dockerfile 中的一个缺陷,我们正在努力解决我们所有 Dockerfile 中的这个问题。

只是想通知您,Bitnami Docker 图像不再在 Docker 文件中声明 VOLUME,这样我们的用户可以更轻松地扩展和自定义 docker 图片。希望您发现此更改有帮助。

如果您有任何其他问题,请加入我们的堆栈社区 http://slack.oss.bitnami.com/