【问题标题】:How can I pass ENV value in Dockerfile from .env file?如何从 .env 文件传递​​ Dockerfile 中的 ENV 值?
【发布时间】:2022-10-09 14:08:08
【问题描述】:

我的目录结构如下所示。

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

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

VERSION=1.2.0
DATE=2022-05-10

我想在期间访问VERSION 和DATE 作为环境变量建造时间和运行.所以ENV 是我应该使用的。我知道。 我该怎么做?

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

RUN export $(cat .env)

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

我可以像手动一样

ENV VERSION 1.2.0
ENV DATE 2022-05-10

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

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

【问题讨论】:

  • Dockerfile 支持 ARG 或 ENV 变量。 .ENV 文件及其提供的变量仅由 docker-compose.yml 文件使用。

标签: docker dockerfile


【解决方案1】:

您可以首先将这些变量作为环境变量导出到您的 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 访问变量

【讨论】:

    【解决方案2】:

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

    
    # 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"
    
    

    【讨论】:

      猜你喜欢
      • 2021-12-13
      • 1970-01-01
      • 1970-01-01
      • 2019-12-30
      • 2023-03-03
      • 2021-11-19
      • 2020-05-01
      • 1970-01-01
      • 2018-02-15
      相关资源
      最近更新 更多