在我,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
.
从文档:
<src>路径必须位于构建的上下文中; 你 不能添加../something/something,因为docker构建的第一步是将上下文目录(和子目录)发送到docker守护进程.
编辑:现在有一个选项(-f
)来设置Dockerfile的路径; 它可以用来达到你想要的效果,请参阅@Boedy的回复nelow.
添加一些代码片段以支持接受的答案。
目录结构:
setup/ |__docker/DockerFile |__target/scripts/<myscripts.sh> src/ |__<my source files>
Docker文件条目:
RUN mkdir -p /home/vagrant/dockerws/chatServerInstaller/scripts/ RUN mkdir -p /home/vagrant/dockerws/chatServerInstaller/src/ WORKDIR /home/vagrant/dockerws/chatServerInstaller #Copy all the required files from host's file system to the container file system. COPY setup/target/scripts/install_x.sh scripts/ COPY setup/target/scripts/install_y.sh scripts/ COPY src/ src/
用于构建Docker映像的命令
docker build -t test:latest -f setup/docker/Dockerfile .
使用docker-compose,您可以设置上下文文件夹:
#docker-compose.yml version: '3.3' services: yourservice: build: context: ./ dockerfile: ./docker/yourservice/Dockerfile
您可以从父目录构建Dockerfile:
docker build -t <some tag> -f <dir/dir/Dockerfile> .