【问题标题】:COPY and ADD not working in DockerfileCOPY 和 ADD 在 Dockerfile 中不起作用
【发布时间】:2017-11-19 07:26:21
【问题描述】:

我们有一个 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 目录的任何想法

【问题讨论】:

    标签: tomcat docker bitnami


    【解决方案1】:

    来自 Bitnami 的相同。

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

    【讨论】:

      【解决方案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 中更改卷: 如果有任何构建步骤 在声明后更改卷内的数据,那些 更改将被丢弃。

      【讨论】:

      • 好吧,虽然我们不知道具体细节,但它与我们的想法一致,另外您是否知道是否有可能在不分叉和更改构建的情况下解决此问题文件(虽然看起来不太可能)?
      • 除了将目录作为卷直接管理而不是尝试更改构建脚本中的文件之外,我没有其他解决方法。
      【解决方案3】:

      只是想通知您,Bitnami Docker 镜像不再在 Dockerfile 中声明VOLUME,这使得我们的用户可以更轻松地扩展和自定义 Docker 镜像。希望此更改对您有所帮助。

      如果您还有任何问题,请通过http://slack.oss.bitnami.com/ 加入我们的堆栈社区。​​p>

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-05-12
        • 2019-02-16
        • 2012-08-21
        • 1970-01-01
        • 2019-12-10
        • 2015-04-01
        • 2015-08-31
        • 1970-01-01
        相关资源
        最近更新 更多