COPY和ADD在Dockerfile中不起作用

Mil*_*daD 5 tomcat bitnami docker

我们有一个dockerfile作为

FROM bitnami/tomcat

EXPOSE 8080
EXPOSE 8009

ADD values.war /opt/bitnami/tomcat/data/
Run Code Online (Sandbox Code Playgroud)

除了values.war文件,似乎从来没有添加过,

docker exec -it values /bin/bash
Run Code Online (Sandbox Code Playgroud)

并检查/opt/bitnami/tomcat/data/未复制战争文件的目录。

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

FROM bitnami/tomcat

EXPOSE 8080
EXPOSE 8009

RUN mkdir -p /var/app
ADD values.war /var/app
Run Code Online (Sandbox Code Playgroud)

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

FROM bitnami/tomcat

EXPOSE 8080
EXPOSE 8009

RUN ls -l /opt/bitnami/tomcat/data/
Run Code Online (Sandbox Code Playgroud)

这给了输出

ls: cannot access /opt/bitnami/tomcat/data/: No such file or directory
Run Code Online (Sandbox Code Playgroud)

建立图像时

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

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

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

BMi*_*tch 3

这是在 Dockerfile 中定义卷的缺点之一,也是我不建议在那里定义它们的原因。当您尝试在构建期间修改卷中的文件时,docker 的行为是未定义的,它可能取决于您的 docker 版本或其他外部变量,因此为了可移植性,最好不要这样做。

由于您正在使用来自另一方的图像,因此我会向他们提出问题以删除该行(请随时将他们指向我的博客文章以获取解释)。在此之前,您可以从 github 查看他们的构建文件并更改 Dockerfile 以构建您自己的基础映像版本。

作为参考,以下是docker 文档中有关在 Dockerfile 中定义卷的注释之一(快 3 倍):

从 Dockerfile 中更改卷:如果任何构建步骤在声明卷后更改了卷中的数据,则这些更改将被丢弃。