在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
有人知道为什么以及如何正确地做到这一点?
答案 0 :(得分:147)
您可以从父目录构建Dockerfile:
docker build -t <some tag> -f <dir/dir/Dockerfile> .
答案 1 :(得分:87)
不幸的是(出于实际和安全原因,我猜),如果要添加/复制本地内容,它必须位于与Dockerfile
相同的根路径下。
&lt; src&gt; path必须在构建的上下文中;您 无法添加../something/something,因为码头工人的第一步 build是将上下文目录(和子目录)发送到 docker daemon。
编辑:现在有一个选项(-f
)来设置Dockerfile的路径;它可以用来达到你想要的效果,请参阅@Boedy的回复nelow。
答案 2 :(得分:58)
使用docker-compose,您可以设置上下文文件夹:
#docker-compose.yml
version: '3.3'
services:
yourservice:
build:
context: ./
dockerfile: ./docker/yourservice/Dockerfile
答案 3 :(得分:5)
使用composer的人的解决方案是使用指向父文件夹的volume:
Unavailable: cudaarithm cudabgsegm cudacodec cudafeatures2d cudafilters cudaimgproc cudalegacy cudaobjdetect cudaoptflow cudastereo cudawarping cudev java python3 viz
但我非常确定可以使用volumes in Dockerfile来完成。
答案 4 :(得分:4)
添加一些代码段以支持已接受的答案。
目录结构:
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 .
答案 5 :(得分:2)
由于-f
引起了另一个问题,我开发了另一个解决方案。
-f
标志无法解决我的问题,因为我的onbuild
图片在文件夹中查找文件并且必须像这样调用:
-f foo/bar/Dockerfile foo/bar
而不是
-f foo/bar/Dockerfile .
另请注意,对于某些情况,这只是-f
标志
答案 6 :(得分:0)
如果您使用的是skaffold,请使用'context:'为每个映像dockerfile指定上下文位置-context:../../../
apiVersion: skaffold/v2beta4
kind: Config
metadata:
name: frontend
build:
artifacts:
- image: nginx-angular-ui
context: ../../../
sync:
# A local build will update dist and sync it to the container
manual:
- src: './dist/apps'
dest: '/usr/share/nginx/html'
docker:
dockerfile: ./tools/pipelines/dockerfile/nginx.dev.dockerfile
- image: webapi/image
context: ../../../../api/
docker:
dockerfile: ./dockerfile
deploy:
kubectl:
manifests:
- ./.k8s/*.yml
skaffold run -f ./skaffold.yaml
答案 7 :(得分:0)