在我的Dockerfile我有:
ADD ../../myapp.war /opt/tomcat7/webapps/
该文件以ls ../../myapp的形式存在。war返回我正确的文件,但当我执行sudo docker构建-t myapp。我有:
Step 1 : ADD ../../myapp.war /opt/tomcat7/webapps/
2014/07/02 19:18:09 ../../myapp.war: no such file or directory
有人知道为什么和如何正确地做吗?
假设你有这样的目录树:
dir0
├───dir1
│ └───dir11
| | └───dockerfile
| └───dir12 (current)
└───dir2 (content to be copied)
你的dockerfile是这样的:
FROM baseImage
COPY / /content
假设您想要使用dir11中的dockerfile的copy或ADD将dir2内容复制到一个新的docker映像中,而您的当前目录是dir12
你必须运行这个命令,以正确地构建你的映像:
docker build -t image-name:tag -f ../dir11/dockerfile ../../dir2
-t your-image-name名称和可选的' Name:tag'格式的标签
- f . ./dir11/dockerfile dockerfile名称(默认为'PATH/ dockerfile ')
. . / . .COPY或ADD命令的当前路径为/dir2
更新
假设你错误地运行了这个:
docker build -t image-name:tag -f ../dir11/dockerfile ../../
这并不能解决你的问题,因为在这种情况下COPY / /内容看起来就像在复制dir0内容(dir1 & dir2),所以为了解决这个问题,你可以使用正确的路径更改命令,或者你也可以像这样更改dockerfile中的COPY源路径:
COPY /dir2 /content
给定以下设置:
+ parent
+ service1
- some_file.json
+ service2
- Dockerfile
如果你在service2中有一个Dockerfile,想要复制some_file。你可以在service2目录中运行这个:
Docker build -t my_image ../——file Dockerfile
这将把目标上下文设置在更高的级别上。这里棘手的部分是,目标Dockerfile是显式设置的(因为它不在目标上下文中)。
在service2/Dockerfile中,你必须发出COPY命令,就好像这个文件在上面一个级别:
service1 / some_file副本。json /目标/位置/ some_file.json
而不是
. . / service1 / some_file副本。json /目标/位置/ some_file。Json #将不能工作