COPY和ADD在Dockerfile中不起作用

时间:2017-06-16 13:33:26

标签: tomcat docker bitnami

我们有一个dockerfile为

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目录的任何想法

3 个答案:

答案 0 :(得分:4)

来自Bitnami的Sameer。

问题的确在于Dockerfile中定义的VOLUME。我们认为这是我们的Dockerfile中的缺陷,我们正在努力解决所有Dockerfiles中的这个问题。

答案 1 :(得分:2)

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

由于你正在处理来自另一方的图像,我会向他们提出一个问题,以便删除该行(请随时将它们指向我的博客文章以获得解释)。在此之前,您可以签出their build files from github并更改Dockerfile以构建您自己的基本映像版本。

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

  

从Dockerfile中更改音量:如果有任何构建步骤   在声明卷之后更改卷内的数据   更改将被丢弃。

答案 2 :(得分:2)

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

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