如何从 .env 文件传递​​ Dockerfile 中的 ENV 值?

我的目录结构如下所示。

|
| --- Dockerfile
| --- .env

.env 文件的内容如下所示。

VERSION=1.2.0
DATE=2022-05-10

我想在 build timerun time 期间访问 VERSIONDATE 作为环境变量。所以 ENV 是我应该使用的。我知道。我该怎么做?

我尝试在 RUN 中使用 Dockerfile 命令,例如

RUN export $(cat .env)

但是,它只能在运行时访问,而不能在构建时访问。那么,如何使用 ENV 来实现呢?

我可以像手动一样

ENV VERSION 1.2.0
ENV DATE 2022-05-10

但是,当我有很多环境变量时,它是低效的。

附言我不能使用 docker-compose 因为图像将被 kubernetes pod 使用,所以。

stack overflow How can I pass ENV value in Dockerfile from .env file?
原文答案

答案:

作者头像

您可以首先将这些变量作为环境变量导出到您的 bash

source .env

然后使用 --build-arg 标志将它们传递给您的 docker build

docker image build --build-arg VERSION=$VERSION --build-arg DATE=$DATE .

接下来在你的 dockerfile

ARG VERSION
ARG DATE
ENV version=$VERSION
ENV date=$DATE

因此,例如,您可以在构建阶段以 VERSION 访问变量,在容器中以 version 访问变量

作者头像

您可以在 env_file 文件中指定 docker-compose.dev.yml ,如下所示:


# docker-compose.dev.yml

services:
  app:
    ...
    env_file:
        - .env.development

并且您必须有一个 .env.development 文件,其中包含您需要传递给 docker 映像的所有环境变量。

例如。:

# .env.development

REACT_APP_API_URL="https://some-api-url.com/api/graphql"