Dockerfile安装NVM报错:$NVM_DIR指向目录不存在的解决问询
Docker构建NVM安装报错原因及解决方法
报错原因
- NVM脚本前置检查机制:NVM安装脚本会先检测
NVM_DIR环境变量,若变量存在则验证对应目录是否已创建。你提前通过ENV设置了NVM_DIR=~/.nvm,但此时该目录尚未创建,触发脚本报错。 ~解析异常:Docker的ENV指令中,~不会被Shell解析为当前用户主目录(如root用户的/root),而是被当作字面量字符处理,导致实际路径为~/.nvm而非预期的/root/.nvm,进一步加剧目录不存在的问题。
可行解决方法
方法一:提前创建目录并使用绝对路径
修改Dockerfile,用绝对路径定义NVM_DIR,并在执行安装脚本前创建该目录:
# 更新源并安装依赖 RUN apt-get update \ && apt-get install -y curl \ && apt-get -y autoclean # 定义环境变量 ENV NVM_DIR=/root/.nvm ENV NODE_VERSION=16.20.2 ENV ANGULAR_VERSION=14.2.13 # 创建目录并安装NVM RUN mkdir -p $NVM_DIR \ && curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.0/install.sh | bash # 加载NVM并安装Node、Angular RUN /bin/bash -c "[ -s \"$NVM_DIR/nvm.sh\" ] && \. \"$NVM_DIR/nvm.sh\" && nvm install $NODE_VERSION && npm install -g @angular/cli@$ANGULAR_VERSION"
方法二:让NVM脚本自动配置环境变量
不提前设置NVM_DIR,先完成NVM安装,再将环境变量配置写入bashrc,后续加载脚本执行操作:
# 更新源并安装依赖 RUN apt-get update \ && apt-get install -y curl \ && apt-get -y autoclean ENV NODE_VERSION=16.20.2 ENV ANGULAR_VERSION=14.2.13 # 安装NVM并配置环境变量到bashrc RUN curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.0/install.sh | bash \ && echo "export NVM_DIR=~/.nvm" >> /root/.bashrc \ && echo "[ -s \"$NVM_DIR/nvm.sh\" ] && \. \"$NVM_DIR/nvm.sh\"" >> /root/.bashrc # 加载脚本并安装Node、Angular RUN /bin/bash -c "source /root/.bashrc && nvm install $NODE_VERSION && npm install -g @angular/cli@$ANGULAR_VERSION"
方法三:使用官方Node镜像(推荐)
若无需管理多版本Node,直接使用官方Node镜像可跳过NVM的环境适配问题,大幅简化构建流程:
FROM node:16.20.2-bullseye ENV ANGULAR_VERSION=14.2.13 RUN npm install -g @angular/cli@$ANGULAR_VERSION
内容的提问来源于stack exchange,提问作者wheeeee
相关产品推荐
相关产品推荐

