Dockerfile中构建一个python+nodejs的镜像。关于环境变量一直掌握不好
我的Dockerfile:
# 使用指定版本的 Node.js 基础镜像
FROM python:3.12.7-slim
# 设置工作目录
WORKDIR /app
RUN apt update && apt install -y curl
RUN curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.0/install.sh | bash
# 设置环境变量以加载 NVM
ENV NODE_VERSION=20.17.0
# 安装项目依赖
COPY package*.json ./
RUN export NVM_DIR="$HOME/.nvm" && \
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" && \
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" && \
nvm -v && nvm install $NODE_VERSION && nvm use nvm install $NODE_VERSION && \
node -v && \
npm -v && \
npm config set registry https://registry.npmmirror.com && \
npm install -g node-gyp && \
npm install
# 更新包列表并安装必要工具
RUN apt update && apt install -y make build-essential
# 清理缓存以减小 Docker 镜像大小
RUN apt clean && rm -rf /var/lib/apt/lists/*
# 复制项目文件到容器中
COPY . .
RUN export NVM_DIR="$HOME/.nvm" && \
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" && \
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" && \
npm run build
# 设置容器启动时的 ENTRYPOINT 脚本
ENTRYPOINT ["entrypoint.sh"]
EXPOSE 9003
# 启动项目
CMD ["npm", "run", "start:prod"]
因为 RUN 命令每一次都是新的层 环境变量无法共享给后面的RUN。就导致我每一条和nvm node相关的命令都需要先导入环境变量 这里还不是问题。最主要在CMD命令也出现了因为环境变量问题 导致npm命令找不到的问题。请教大神帮忙修改这个Dockerfile。
因为在apt无法很好的指定node版本 所以想通过nvm来安装指定版本的node
在网上查教程 说可以通过entrypoint.sh 文件来导入环境变量,但是当我导入后 之前正常的build 流程就会出错。所以我应该如何在docker中安装指定的node版本呢?