在Docker Alpine镜像中安装NVM后,如何配置export NVM_DIR?
解决Docker中NVM环境变量加载问题
在Docker构建过程中,每个RUN指令都运行在独立的Shell会话里,所以NVM安装脚本提示的export NVM_DIR配置必须在同一个RUN会话内直接加载,才能让后续的NVM命令生效。
修改后的Dockerfile片段
ARG PHP_VERSION=8.1 FROM php:${PHP_VERSION}-fpm-alpine AS coo-php WORKDIR /srv/app # Install Node, NVM and Yarn RUN apk add --no-cache libstdc++ bash zsh; \ curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.35.1/install.sh | bash; \ echo 'export NVM_NODEJS_ORG_MIRROR=https://unofficial-builds.nodejs.org/download/release;' >> $HOME/.profile; \ echo 'nvm_get_arch() { nvm_echo "x64-musl"; }' >> $HOME/.profile; \ # 直接加载nvm脚本和profile,确保环境变量生效 source $HOME/.nvm/nvm.sh && source $HOME/.profile && \ nvm install 18 && \ # 可选:全局安装yarn npm install -g yarn
关键注意点
- 无需手动执行
export NVM_DIR="$HOME/.nvm":nvm.sh脚本内部已经会自动设置这个环境变量,直接source即可。 - 所有依赖NVM的命令(如
nvm install)必须和source命令放在同一个RUN里:因为Docker的每个RUN是独立的容器层,环境变量不会跨层保留。 - 如果需要容器启动后能直接用NVM,可以把加载命令写入Shell配置文件:
RUN echo 'source $HOME/.nvm/nvm.sh' >> $HOME/.bashrc && \ echo 'source $HOME/.profile' >> $HOME/.bashrc
内容的提问来源于stack exchange,提问作者Aerendir
相关产品推荐
相关产品推荐

