我是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
    

    我跑了


    docker build --build-arg BLD_DIR=${BLD_DIR} -t docker-test:1.0 -f Dockerfile
    

    总是像这样的错误

    最佳答案

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

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

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



    这是自愿的,因为使用docker build构建镜像不应依赖于系统上的辅助文件:如果在2台不同的机器上构建相同的Docker镜像,则不应有所不同。
  • 但是,您可以具有如下目录结构:
    /home/user1/
    |___file1
    |___docker/
    |___|___ Dockerfile
    

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

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

    关于docker - docker复制问题并设置主机环境变量,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51343389/

    10-16 14:01
    查看更多