作者:曹衡斌_307 | 来源:互联网 | 2023-02-01 17:34
我有一个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"
我发现$PWD
(或${PWD}
)在运行时未设置docker build
,作为比较,$PATH
正确扩展.
此外,$PWD
在RUN
已经没有问题(它打印/some/path
在这种情况下)
所以给定Dockerfile的输出将是:
PWD is: /some/path
PYENV is: /pyenv
有人能告诉我为什么$PWD
这么特别吗?我想这可能与行为有关,WORKDIR
但我对此没有任何线索.
1> Robert..:
PWD是一个在shell中设置的特殊变量.当docker RUN使用此表单执行某些sh -c 'something'
操作时,从ENV指令传递预定义的环境变量,其中PWD不在该列表中(请参阅其中docker inspect
).
ENV指令不会启动shell.只需在图像元数据中添加或更新env vars的当前列表.
我会写你的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"
文档中的更多信息:
WORKDIR指令为Dockerfile中的任何RUN,CMD,ENTRYPOINT,COPY和ADD指令设置工作目录.如果WORKDIR不存在,即使它未在任何后续Dockerfile指令中使用,也将创建它.