Docker安装nvm时出现'nvm: command not found'错误的求助
问题原因
每个RUN指令都会启动一个独立的Shell进程,进程之间的环境变量完全隔离。你执行RUN source ~/.nvm/nvm.sh时,仅在当前进程中加载了nvm的环境变量,但这个变量不会传递到下一个RUN指令的进程里,所以后续执行nvm install时会提示命令找不到。
而手动在容器内操作时,所有命令都在同一个Shell会话中执行,source后的环境变量会持续生效,因此能正常运行。
解决方案
方案1:合并命令到同一个RUN(推荐)
将source、nvm install、nvm use等命令合并到同一个RUN指令中,确保它们在同一个Shell进程内执行:
FROM maven:3-jdk-8 RUN rm /bin/sh && ln -s /bin/bash /bin/sh RUN curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash \ && source ~/.nvm/nvm.sh \ && nvm install 16 \ && nvm use 16 \ && nvm alias default 16 # 可选:设置16为默认Node版本,后续启动容器时自动生效
方案2:将nvm初始化加入bash配置文件
把source ~/.nvm/nvm.sh写入~/.bashrc,让每次启动bash时自动加载nvm环境:
FROM maven:3-jdk-8 RUN rm /bin/sh && ln -s /bin/bash /bin/sh RUN curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash \ && echo "source ~/.nvm/nvm.sh" >> ~/.bashrc RUN source ~/.bashrc && nvm install 16 && nvm alias default 16
内容的提问来源于stack exchange,提问作者Jamie
相关产品推荐
相关产品推荐

