我有一个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"
Run Code Online (Sandbox Code Playgroud)
我发现$PWD(或${PWD})在运行时未设置docker build,作为比较,$PATH正确扩展.
此外,$PWD在RUN已经没有问题(它打印/some/path在这种情况下)
所以给定Dockerfile的输出将是:
PWD is: /some/path
PYENV is: /pyenv
Run Code Online (Sandbox Code Playgroud)
有人能告诉我为什么$PWD这么特别吗?我想这可能与行为有关,WORKDIR但我对此没有任何线索.
PWD是一个在shell中设置的特殊变量.当docker RUN使用此表单执行某些sh -c 'something'操作时,从ENV指令传递预定义的环境变量,其中PWD不在该列表中(请参阅其中docker inspect <image-id>).
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"
Run Code Online (Sandbox Code Playgroud)
文档中的更多信息:
WORKDIR指令为Dockerfile中的任何RUN,CMD,ENTRYPOINT,COPY和ADD指令设置工作目录.如果WORKDIR不存在,即使它未在任何后续Dockerfile指令中使用,也将创建它.
| 归档时间: |
|
| 查看次数: |
17477 次 |
| 最近记录: |