Docker COPY 失败,没有这样的文件或目录,但我是 root 并且可以访问该文件

Docker COPY 失败,没有这样的文件或目录,但我是 root 并且可以访问该文件

简单的dockerfile如下:

FROM tomcat:latest
RUN cp -R /usr/local/tomcat/webapps.dist/* /usr/local/tomcat/webapps
COPY /home/dockeradmin/*.war /usr/local/tomcat/webapps

第三条语句失败,提示没有这样的文件或目录。我以 root 身份在 /root 内运行此程序。/home/dockeradmin 和 *.war 文件归 dockeradmin 用户所有,但作为 root,我可以访问它。

我可以ls /home/dockeradmin/*.war毫无问题地运行。

RUN cp /home/dockeradmin/*.war /usr/local/tomcat/webapps

cp 也失败了:无法统计“/home/dockeradmin/*.war”:没有这样的文件或目录我也可以stat /home/dockeradmin/*.war毫无问题地运行。它有 664 权限,更改为 777,仍然不行。

如果我将 Dockerfile 复制到 /home/dockeradmin 并更改指令:

COPY ./*.war /usr/local/tomcat/webapps

它工作正常。

不确定为什么第一个选项有问题。

答案1

DockerCOPY <src>被解释为 docker 构建上下文的相对路径。请参阅文档

答案2

目的地必须以/

即:/usr/local/tomcat/webapps/是正确的,而不是/usr/local/tomcat/webapps

答案3

实际上 docker cp 从源和目标获取的路径是绝对路径,我解决此错误的方法是首先找到要复制到主机的 docker 容器中的文件的路径:

docker exec <container_name_or_id> find / -name "<filename>"

您还可以使用以下方式以最高 root 权限查看文件

ls /

然后您可以使用带有绝对路径的 docker cp 命令docker cp 命令:

docker cp <containerId>:/file/path/within/container /host/path/target

答案4

复制源目标

COPY . /usr/local/tomcat/webapps 这意味着 dockerfile 所在目录中的文件将被复制到目标路径的容器中。

尝试在源中提供绝对路径。

相关内容