Dockerfile忽略PATH环境变量

时间:2016-10-19 20:29:23

标签: node.js docker

在构建期间,似乎忽略了PATH环境变量。我有这样的Dockerfile:

COPY my_app /opt/my_app
RUN echo $PATH
RUN node --version

CMD ["node", "app.js"]

...,它给我带来了构建时错误,说:

  找不到

/ bin / sh:node:命令   命令'/ bin / sh -c node --version'返回非零代码:127

行RUN echo $ PATH向我显示node-dir已经在PATH中,为什么它没有被docker build接收?

/usr/local/nvm/v6.9.0/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

2 个答案:

答案 0 :(得分:1)

$PATH变量仅在构建时可从主机环境获得,而不是在运行时。无论如何,当我制作特定于机器的图像时,我强烈建议不要在构建时使用它。

docker run documentation清楚地说明了在运行时将哪些环境变量设置为默认值。还需要手动设置其他任何内容。这就是它所说的:

  

创建新容器时,Docker将自动设置以下环境变量:

HOME    Set based on the value of USER
HOSTNAME    The hostname associated with the container
PATH    Includes popular directories, such as :/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
TERM    xterm if the container is allocated a pseudo-TTY

答案 1 :(得分:0)

我相信您在使用node之前需要配置NVM。

这样的事情应该有效:

COPY my_app /opt/my_app
RUN echo $PATH
RUN nvm use 6.9.0 
# or, if you want this version to be the default `node`, use: 
# `nvm alias default 6.9.0`
RUN node --version

CMD ["node", "app.js"]