Alpine Linux Docker镜像中nvm命令未找到问题求助
解决Docker中nvm命令找不到的问题
问题原因
Docker的每个RUN指令都会启动独立的非交互式bash进程,这类进程默认不会加载~/.bashrc文件。你虽将nvm初始化脚本写入.bashrc,但后续RUN指令无法读取这些配置,导致nvm命令无法被识别。
修复后的Dockerfile
# Pull the Alpine 3.16 Docker image FROM alpine:3.16 # Enter the BASH shell ENTRYPOINT [ "/bin/bash" ] # Add packages without caching, but while upgrading Alpine RUN apk add --no-cache -U\ curl bash ca-certificates\ openssl ncurses coreutils\ python3 make gcc g++\ libgcc linux-headers grep\ util-linux binutils findutils RUN touch ~/.bashrc # Install NVM, source it immediately and run setup commands in the same shell session RUN curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash && \ export NVM_DIR="$HOME/.nvm" && \ [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" && \ nvm install -s --lts --latest-npm && \ nvm alias default lts/* # 写入nvm初始化配置到.bashrc,确保进入容器时能加载nvm RUN echo '\ export NVM_DIR="$HOME/.nvm" \ [-s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" \ [[ -r $NVM_DIR/bash_completion ]] && \. $NVM_DIR/bash_completion\ ' > ~/.bashrc # Install NPM packages and run the dev server RUN [ "/bin/bash", "-c", "source ~/.nvm/nvm.sh && npm i" ] CMD [ "/bin/bash", "-c", "source ~/.nvm/nvm.sh && npm run dev" ]
关键修改说明
- 将nvm安装、初始化和Node安装命令合并到同一个
RUN指令:所有操作在同一shell会话执行,nvm环境变量即时生效,无需依赖.bashrc加载。 - 在执行
npm命令的RUN和CMD中手动source ~/.nvm/nvm.sh:确保非交互式shell执行时能加载nvm环境,找到npm命令。 - 调整
.bashrc写入顺序:先完成nvm安装与Node配置,再写入初始化脚本,避免顺序问题。
内容的提问来源于stack exchange,提问作者Luke Batema
相关产品推荐
相关产品推荐

