我是Docker的新手。 我想了解以下问题。我一直在搜索,但是找不到我的问题的答案。
为什么在尝试复制文件时总是出现错误的路径?
这是否意味着我只能将文件从我拥有dockerfile的同一目录复制到docker映像中?有没有办法从主机上的其他目录复制文件?
有没有一种方法可以在不使用“ ARG”和--build-arg标志的情况下直接在Dockerfile中传递主机的环境变量?
下面是我目前拥有的
文件结构如下:
/home/user1/docker
|__ Dockerfile
在Dockerfile中:
From
ARG BLD_DIR=/tmp
RUN mkdir /workdir
WORKDIR /workdir
COPY ${BLD_DIR}/a.file /workdir
我跑了
root @ localhost> echo $ BLD_DIR
/ tmp / build <-BLD_DIR是一个自定义变量;表示每个开发环境都不同
docker build --build-arg BLD_DIR=${BLD_DIR} -t docker-test:1.0 -f Dockerfile
总是出现
之类的错误复制失败:统计 /var/lib/docker/tmp/docker-builder035089075/tmp/build/a.file:没有这样的文件 或目录
答案 0 :(得分:1)
默认情况下,运行docker build
命令的目录中的所有文件都将复制到Docker上下文文件夹。
因此,当您使用ADD
或COPY
命令时,所有路径实际上都是相对于build文件夹的,如文档所述:
可以指定多个资源,但是文件和目录的路径将被解释为相对于构建上下文的源。
这是自愿的,因为使用docker build
构建映像不应依赖于系统上的辅助文件:如果在2台不同的机器上构建,则同一Docker映像也不应有所不同。
但是,您可以具有如下目录结构:
/home/user1/
|___file1
|___docker/
|___|___ Dockerfile
如果在docker build -t test -f docker/Dockerfile .
文件夹中运行/home/user1
,您的构建上下文将为/home/user1
,因此可以在您的Dockerfile中COPY file1
。
docker build
命令应“打包”在2个不同系统上生成同一映像所需的所有信息。
但是,您可以使用docker-compose破解它,例如:Pass host environment variables to dockerfile。