gpt4 book ai didi

docker - $PWD 未在 Dockerfile 的 ENV 指令中设置

转载 作者:IT老高 更新时间:2023-10-28 21:25:31 31 4
gpt4 key购买 nike

我有一个像这样开始的 Dockerfile:

FROM ubuntu:16.04
WORKDIR /some/path
COPY . .
ENV PYTHONUSERBASE=$PWD/pyenv PATH=$PWD/pyenv/bin:$PATH
RUN echo "PWD is: $PWD"
RUN echo "PYENV is: $PYTHONUSERBASE"

我发现运行docker build时没有设置$PWD(或${PWD}),作为比较,$PATH 已正确展开。

另外,RUN中的$PWD没有问题(本例打印/some/path)

所以给定 Dockerfile 的输出将是:

PWD is: /some/path
PYENV is: /pyenv

谁能告诉我为什么 $PWD 如此特别?我想这可能与 WORKDIR 的行为有关,但我对此一无所知。

最佳答案

PWD 是一个在 shell 中设置的特殊变量。当 docker RUN 某些东西时,它会使用此表单 sh -c 'something' ,从 ENV 指令中传递预定义的环境变量,其中 PWD 不在该列表中(参见 docker inspect <image-id>)。

ENV 指令不会启动 shell。只需在图像元数据中添加或更新当前环境变量列表。

我会这样写你的 Dockerfile:

FROM ubuntu:16.04
ENV APP_PATH=/some/path
WORKDIR $APP_PATH
COPY . .
ENV PYTHONUSERBASE=$APP_PATH/pyenv PATH=$APP_PATH/pyenv/bin:$PATH
RUN echo "PWD is: $PWD"
RUN echo "PYENV is: $PYTHONUSERBASE"

更多信息见 docs :

The WORKDIR instruction sets the working directory for any RUN, CMD, ENTRYPOINT, COPY and ADD instructions that follow it in the Dockerfile. If the WORKDIR doesn’t exist, it will be created even if it’s not used in any subsequent Dockerfile instruction.

关于docker - $PWD 未在 Dockerfile 的 ENV 指令中设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44452854/

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