在构建期间,似乎忽略了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
答案 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"]