【发布时间】:2019-08-22 16:53:48
【问题描述】:
我想在使用 Dockerfile 进行 docker 构建期间生成一个 .env 文件并将其推送到 docker 映像。 问题是 .env 文件未复制到 docker 映像。 我试图将 COPY .env 添加到 /website/.env 但找不到它。 我在构建过程中执行一个 nodejs 脚本,从 AWS 获取环境,然后创建一个 .env 文件。
FROM node:10.15.3-alpine
ARG SERVER_ENV
# Create app directory
RUN mkdir /website
WORKDIR /website
COPY . /website/
RUN node aws ${SERVER_ENV}
COPY .env /website/.env
COPY package.json yarn.lock ./
RUN ls -al
RUN pwd
# Install Yarn
RUN npm install -g yarn@1.15.2
# Install app dependencies
RUN yarn install
# Build source files
RUN yarn run build
更新 我终于找到了修复它的方法。 我像这样在我的 Dockerfile 中分离任务:
FROM mhart/alpine-node:10 as env
ARG SERVER_ENV
WORKDIR /usr/src
COPY aws.js /usr/src
RUN yarn add aws-sdk
COPY . .
RUN node aws ${SERVER_ENV}
FROM mhart/alpine-node:10 as base
WORKDIR /usr/src
COPY package.json yarn.lock /usr/src/
RUN yarn install
COPY . .
COPY --from=env /usr/src .
RUN yarn build
FROM mhart/alpine-node:10
WORKDIR /usr/src
COPY --from=base /usr/src .
【问题讨论】:
-
旁注,通常 .env 包含凭据。不是你想分享的东西。通常我会看到项目包含一个 .env.dist ,其中包含 var 名称(键)。消费者必须“cp .env.dist .env”并填充凭据。 .env 在任何版本控制系统中也会被忽略,以防止提交凭据。值得深思。
标签: node.js docker environment-variables