在我,Dockerfile我有:
ADD ../../myapp.war /opt/tomcat7/webapps/
Run Code Online (Sandbox Code Playgroud)
该文件存在,因为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
Run Code Online (Sandbox Code Playgroud)
有人知道为什么以及如何正确地做到这一点?
Boe*_*edy 184
您可以从父目录构建Dockerfile:
docker build -t <some tag> -f <dir/dir/Dockerfile> .
Run Code Online (Sandbox Code Playgroud)
mba*_*emy 93
不幸的是,(出于实际和安全原因,我猜),如果要添加/复制本地内容,它必须位于与之相同的根路径下Dockerfile.
从文档:
<src>路径必须位于构建的上下文中; 你 不能添加../something/something,因为docker构建的第一步是将上下文目录(和子目录)发送到docker守护进程.
编辑:现在有一个选项(-f)来设置Dockerfile的路径; 它可以用来达到你想要的效果,请参阅@Boedy的回复nelow.
小智 75
使用docker-compose,您可以设置上下文文件夹:
#docker-compose.yml
version: '3.3'
services:
yourservice:
build:
context: ./
dockerfile: ./docker/yourservice/Dockerfile
Run Code Online (Sandbox Code Playgroud)
gun*_*sus 11
由于-f引起了另一个问题,我开发了另一个解决方案。
该-f标志没有解决我的问题,因为我的onbuild图像在文件夹中查找文件并且必须像这样调用:
-f foo/bar/Dockerfile foo/bar
代替
-f foo/bar/Dockerfile .
另请注意,这只是某些情况下作为-f标志的解决方案
lfa*_*oco 11
给出以下设置:
+ parent
+ service1
- some_file.json
+ service2
- Dockerfile
Run Code Online (Sandbox Code Playgroud)
如果您有一个 Dockerfileservice2并想some_file.json从中复制,您可以在service2 目录中service1运行它:
docker build -t my_image ../ --file Dockerfile
这会将目标上下文设置为高一级。这里棘手的部分是目标 Dockerfile 是显式设置的(因为它不在目标上下文中)。
在 中service2/Dockerfile,您必须发出该COPY命令,就好像该文件位于上一级:
COPY service1/some_file.json /target/location/some_file.json
代替
COPY ../service1/some_file.json /target/location/some_file.json # will not work
添加一些代码片段以支持接受的答案。
目录结构:
setup/
|__docker/DockerFile
|__target/scripts/<myscripts.sh>
src/
|__<my source files>
Run Code Online (Sandbox Code Playgroud)
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/
Run Code Online (Sandbox Code Playgroud)
用于构建Docker映像的命令
docker build -t test:latest -f setup/docker/Dockerfile .
Run Code Online (Sandbox Code Playgroud)
让我们在 docker-compose.yml 的父文件夹中设置上下文:../../
例如:
app:
build:
context: ../../
dockerfile: ./source/docker/dockerfile/Dockerfile
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
107064 次 |
| 最近记录: |