Docker:如何将文件从容器中的一个文件夹复制到另一个文件夹?

Sho*_*eki 5 docker docker-compose

我想将我编译的 war 文件复制到 Docker 容器中的 tomcat 部署文件夹。由于COPYADD与主机移动文件到容器的交易,我试过

RUN mv /tmp/projects/myproject/target/myproject.war /usr/local/tomcat/webapps/ 
Run Code Online (Sandbox Code Playgroud)

作为对这个问题答案的修改。但我收到错误

mv: cannot stat ?Çÿ/tmp/projects/myproject/target/myproject.war?ÇÖ: No such file or directory
Run Code Online (Sandbox Code Playgroud)

如何从一个文件夹复制到同一容器中的另一个文件夹?

Wel*_*ing 7

六年后我觉得发布新答案相当愚蠢,但奇怪的是,在我看来,实际OP的最简单答案缺失了。对于像我这样的下一个人,这就是我正在寻找的东西。

#just for grins, I empty the destination folder first
RUN rm ./xyz/pdq/*

#I now copy the file def.pdf into the pdq folder
RUN cp /abc/def.pdf ./xyz/pdq
Run Code Online (Sandbox Code Playgroud)

帖子里有提到mv,但奇怪的是没有提到cp。事实上,这就是OP问题的答案:“如何从一个文件夹复制到同一容器中的另一个文件夹?”

无论如何。


Rom*_*eis 5

您可以创建多阶段构建:

https://docs.docker.com/develop/develop-images/multistage-build/

在第一阶段构建 .war 文件并将该阶段命名为 build,如下所示:

FROM my-fancy-sdk as build
RUN my-fancy-build #result is your myproject.war 
Run Code Online (Sandbox Code Playgroud)

然后在第二阶段:

FROM my-fancy-sdk as build2
COPY --from=build /tmp/projects/myproject/target/myproject.war /usr/local/tomcat/webapps/ 
Run Code Online (Sandbox Code Playgroud)


Ayu*_*hya 0

更好的解决方案是使用卷将各个 war 文件绑定到 docker 容器内,如此处所示

为什么你的命令失败

您正在运行的命令尝试访问与 dockerfile 上下文无关的文件。docker build .当您使用守护程序构建映像时,会将其发送context到构建器,并且在构建过程中只能访问这些文件。在docker build .上下文中是.当前目录。因此,它将无法访问/tmp/projects/myproject/target/myproject.war.

从容器内部复制

另一种选择是在容器内进行复制。首先使用volumes将本地文件夹挂载到容器内,然后使用进入容器内部docker exec -it <container_name> bash,然后复制所需的文件。

推荐

但我仍然强烈建议使用

docker run -v "/tmp/projects/myproject/target/myproject.war:/usr/local/tomcat/webapps/myproject.war" <image_name>
Run Code Online (Sandbox Code Playgroud)

  • 他想将容器内的文件从容器内的一个位置复制到容器内的另一个位置。 (5认同)