docker复制问题并设置主机环境变量

时间:2018-07-14 21:08:10

标签: docker dockerfile

我是Docker的新手。 我想了解以下问题。我一直在搜索,但是找不到我的问题的答案。

  1. 为什么在尝试复制文件时总是出现错误的路径?

  2. 这是否意味着我只能将文件从我拥有dockerfile的同一目录复制到docker映像中?有没有办法从主机上的其他目录复制文件?

  3. 有没有一种方法可以在不使用“ 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:没有这样的文件   或目录

1 个答案:

答案 0 :(得分:1)

  1. 在Dockerfile中,您只能复制当前Docker构建上下文中可用的文件。

默认情况下,运行docker build命令的目录中的所有文件都将复制到Docker上下文文件夹。

因此,当您使用ADDCOPY命令时,所有路径实际上都是相对于build文件夹的,如文档所述:

  

可以指定多个资源,但是文件和目录的路径将被解释为相对于构建上下文的源。

这是自愿的,因为使用docker build构建映像不应依赖于系统上的辅助文件:如果在2台不同的机器上构建,则同一Docker映像也不应有所不同。

  1. 但是,您可以具有如下目录结构:

    /home/user1/
    |___file1
    |___docker/
    |___|___ Dockerfile
    

如果在docker build -t test -f docker/Dockerfile .文件夹中运行/home/user1 ,您的构建上下文将为/home/user1,因此可以在您的Dockerfile中COPY file1

  1. 出于同样的原因,您不能直接在Dockerfile中使用环境变量。这个想法是,您的docker build命令应“打包”在2个不同系统上生成同一映像所需的所有信息。 但是,您可以使用docker-compose破解它,例如:Pass host environment variables to dockerfile