Sho*_*eki 5 docker docker-compose
我想将我编译的 war 文件复制到 Docker 容器中的 tomcat 部署文件夹。由于COPY和ADD与主机移动文件到容器的交易,我试过
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)
如何从一个文件夹复制到同一容器中的另一个文件夹?
六年后我觉得发布新答案相当愚蠢,但奇怪的是,在我看来,实际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问题的答案:“如何从一个文件夹复制到同一容器中的另一个文件夹?”
无论如何。
您可以创建多阶段构建:
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)
更好的解决方案是使用卷将各个 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)
| 归档时间: |
|
| 查看次数: |
12476 次 |
| 最近记录: |