Docker:从父目录添加一个文件
在我的Dockerfile
有:
ADD ../../myapp.war /opt/tomcat7/webapps/
该文件存在为ls ../../myapp.war
返回正确的文件,但是当我执行sudo docker build -t myapp .
我有 :
Step 1 : ADD ../../myapp.war /opt/tomcat7/webapps/ 2014/07/02 19:18:09 ../../myapp.war: no such file or directory
有人知道为什么以及如何正确地做到这一点?
不幸的是,(为了实际和安全的原因,我猜),如果你想添加/复制本地内容,它必须位于与Dockerfile
相同的根path下。
从文档 :
<src>path必须位于构build的上下文中; 你不能添加../something /东西,因为docker build的第一步是将上下文目录(和子目录)发送到docker守护进程。
编辑:现在有一个选项( -f
)来设置您的Dockerfile的path; 它可以用来实现你想要的,看到@Boedy的反应就是这样。
您可以从父目录构buildDockerfile:
docker build -t <some tag> -f <dir/dir/Dockerfile> .
使用docker-compose你可以设置上下文文件夹:
#docker-compose.yml version: '3.3' services: yourservice: build: context: ./ dockerfile: ./docker/yourservice/Dockerfile
那些使用composer php的解决scheme是使用指向父文件夹的卷:
#docker-composer.yml foo: build: foo volumes: - ./:/src/:ro
但我很确定可以在Dockerfile中使用卷来完成。
由于-f
导致另一个问题,我开发了另一个解决scheme。
- 在父文件夹中创build一个基础图像
- 添加了所需的文件。
- 将此图像用作后代文件夹中的项目的基础图像。
-f
标志没有解决我的问题,因为我的onbuild
图像在文件夹中查找文件,不得不像这样调用:
-f foo/bar/Dockerfile foo/bar
代替
-f foo/bar/Dockerfile .
另外请注意,这只是解决某些情况下的-f
标志