想构建一个容器,在项目的根目录下有一个 .env 的文件想一同复制到容器 build 后的 /dist
中,但试了好久都提示找不到环境变量,不知道怎么加入到 Dockerfile 里,想问问大家怎么添加的
###################
# BUILD FOR LOCAL DEVELOPMENT
###################
FROM node:18-alpine As development
# 创建应用目录
WORKDIR /usr/src/app
# 复制依赖清单到容器镜像里.
# 这个星号通配符意思是复制 package.json 和 package-lock.json,复制到当前应用目录.
# 首先复制这个选项可以防止在每次代码更改时重新运行 npm install.
COPY --chown=node:node package*.json ./
# 使用 npm ci 来安装依赖而不是 npm install
RUN npm ci
# 复制安装后的依赖包到当前目录下
COPY --chown=node:node . .
# 使用指定的用户而不是 root 权限用户
USER node
###################
# BUILD FOR PRODUCTION
###################
FROM node:18-alpine As build
WORKDIR /usr/src/app
COPY --chown=node:node package*.json ./
# 我们需要通过 Nest CLI 来执行 npm run build,这是个开发依赖,然后把安装后依赖全部复制到指定目录
COPY --chown=node:node --from=development /usr/src/app/node_modules ./node_modules
COPY --chown=node:node . .
# 执行打包命令
RUN npm run build
# 设置生产环境变量
ENV NODE_ENV production
# 运行' npm ci '会删除现有的 node_modules 目录,并传入——only=production 确保只安装了生产依赖项。这确保 node_modules 目录尽可能优化
RUN npm ci --only=production && npm cache clean --force
USER node
###################
# PRODUCTION
###################
FROM node:18-alpine As production
# 将生产依赖和打包后的文件复制到指定目录下
COPY --chown=node:node --from=build /usr/src/app/node_modules ./node_modules
COPY --chown=node:node --from=build /usr/src/app/dist ./dist
# 启动服务
CMD [ "node", "dist/main.js" ]
1
mdn 2023-03-17 17:15:28 +08:00
最好不要将 .env 放入镜像中
可以使用 docker run --env-file /home/.env image ,读取环境变量文件 |
2
hingle 2023-03-17 17:16:42 +08:00
看看有没有 .dockerignore 文件
|
3
dominickkorey OP |
4
hingle 2023-03-17 17:24:15 +08:00
COPY --chown=node:node .env ./dist
|
5
dominickkorey OP @hingle 试过这么写但都不行
|
6
wdssmq 2023-03-17 18:26:09 +08:00
.env 不应该是从 node 执行的当前路径加载么
|