Dockerfile 的一个小问题

2023-03-17 17:08:24 +08:00
 dominickkorey

想构建一个容器,在项目的根目录下有一个 .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" ]

1437 次点击
所在节点    Docker
6 条回复
mdn
2023-03-17 17:15:28 +08:00
最好不要将 .env 放入镜像中
可以使用 docker run --env-file /home/.env image ,读取环境变量文件
hingle
2023-03-17 17:16:42 +08:00
看看有没有 .dockerignore 文件
dominickkorey
2023-03-17 17:20:20 +08:00
@mdn 尝试过但是还提示缺少环境变量,给我整不会了

@hingle 有,但是里面没加 .env 的文件
hingle
2023-03-17 17:24:15 +08:00
COPY --chown=node:node .env ./dist
dominickkorey
2023-03-17 17:52:33 +08:00
@hingle 试过这么写但都不行
wdssmq
2023-03-17 18:26:09 +08:00
.env 不应该是从 node 执行的当前路径加载么

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/924904

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX