简单的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 所在目录中的文件将被复制到目标路径的容器中。
尝试在源中提供绝对路径。