Docker构建成功后yarn命令提示未找到的问题求助
Docker构建成功后yarn命令提示未找到的问题求助
嗨,我来帮你分析下这个问题~
你遇到的核心问题是:nvm的环境变量只在构建镜像时的那个RUN shell会话里生效,当你启动容器进入新的bash时,系统并不会自动加载~/.nvm/nvm.sh脚本,导致node和yarn的路径没被加入到系统的PATH环境变量中,所以才会提示“command not found”。
给你几个可行的解决方案,你可以根据需求选:
方案一:让容器启动的bash自动加载nvm环境
直接修改你的Dockerfile,在RUN命令的末尾添加一行,把nvm的加载命令写入bash的配置文件,这样每次启动bash都会自动加载环境变量:
FROM amazonlinux:2 RUN yum update -y && \ yum install tar curl gzip -y && \ curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.5/install.sh | bash && \ . ~/.nvm/nvm.sh && \ nvm install 14 -y && \ npm install yarn -g && \ yum install aws-cli -y && \ echo "source ~/.nvm/nvm.sh" >> ~/.bashrc && \ # 新增这一行,让bash启动时加载nvm yum clean all
方案二:直接把node路径加入全局环境变量
如果你不想依赖nvm的shell脚本,也可以把node14的二进制路径直接加到系统全局PATH里,用ENV指令持久化:
FROM amazonlinux:2 RUN yum update -y && \ yum install tar curl gzip -y && \ curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.5/install.sh | bash && \ . ~/.nvm/nvm.sh && \ nvm install 14 -y && \ npm install yarn -g && \ yum install aws-cli -y && \ yum clean all # 把node14的二进制路径加入全局PATH,替换成你实际安装的node版本号 ENV PATH="/root/.nvm/versions/node/v14.21.3/bin:$PATH"
要是怕版本号写错,也可以在RUN里动态获取路径并写入bash配置:
echo "export PATH=$(nvm which 14)/bin:$PATH" >> ~/.bashrc
方案三:跳过nvm,直接安装node14的rpm包
如果你的场景不需要切换node版本,其实可以不用nvm,直接从官方源安装node14,这样环境变量会自动配置好,更简洁:
FROM amazonlinux:2 RUN yum update -y && \ yum install tar curl gzip aws-cli -y && \ curl -sL https://rpm.nodesource.com/setup_14.x | bash - && \ yum install -y nodejs && \ npm install yarn -g && \ yum clean all
选其中一个方案修改Dockerfile重新构建,应该就能解决yarn找不到的问题啦~
备注:内容来源于stack exchange,提问作者Neetesshhr




