gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 18:21:44 24 4
gpt4 key购买 nike

我是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 is a custom variable; meaning it's different on each dev env


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

    总是像这样的错误

    COPY failed: stat /var/lib/docker/tmp/docker-builder035089075/tmp/build/a.file: no such file or directory

    最佳答案

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

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

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

    Multiple resources may be specified but the paths of files and directories will be interpreted as relative to the source of the context of the 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/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com