【问题标题】:Dockerfile - use environment variable from env fileDockerfile - 使用 env 文件中的环境变量
【发布时间】:2021-08-08 09:14:34
【问题描述】:

我有一个 docker compose 设置,我想在我的 dockerfile 中使用来自 env 文件的环境变量。我想在构建时使用这些变量,因为我使用此版本号来连接字符串以形成下载 URL。

我在这里写了一部分我正在使用的文件,只是为了将注意力集中在我的问题上。

.env

MY_APP_VER=v1.2.3

docker-compose.yml

version: "2"
services:
  my-app:
    build: .
    container_name: my_app
    environment:
      - my_app_version=$MY_APP_VER

Dockerfile

FROM scratch
ENV my_app_ver=$my_app_version
RUN echo $my_app_ver

我检查了各种来源,但没有任何成功。我不确定这是否可行,或者我是否使用了错误的语法(我应该使用引号还是不使用引号,例如“$my_app_ver”或大括号 ${my_app_ver})。

【问题讨论】:

    标签: docker docker-compose dockerfile environment-variables


    【解决方案1】:

    对于 3.8 版本,您可以通过以下方式进行操作

    version: '3.8'
    
    services:
      my-app:
        build: .
        ports:
          - ${CONTAINER_PORT}:${PORT} # for example
        env_file: .env
        container_name: my-app-${NODE_ENV} # for example
        environment: 
          MYSQL_DATABASE: ${DB_NAME} # for example
          my_app_version: ${MY_APP_VER} # for your case
    
    

    documentation中查找更多信息

    此外,您可以在 Dockerfile 和 docker-compose here 中找到有关环境变量使用的更多信息

    【讨论】:

    • 谢谢!我可以在构建期间在 Dockerfile 中使用这些参数吗?以及如何?
    • 请看@SašaVranić vsupalov.com/docker-arg-env-variable-guide。我认为这可能会有所帮助。
    • 感谢@Cyber​​Eternal。这有帮助!
    • 这是我的荣幸。
    【解决方案2】:

    在 docker-compose 中有一个名为 env-file 的选项,您可以利用:https://docs.docker.com/compose/environment-variables/#the-env_file-configuration-option

    version: "3"
    services:
      my-app:
        build: .
        container_name: my_app
        env_file:
        - .env.dev
    

    请注意,默认情况下会加载 .env 文件,如果它存在于当前上下文中。所以你只需要使用env_file,如果它的名称不同或在不同的文件夹中。

    【讨论】:

    • 我的目录中有 .env 文件。如果目前理解,如果 env 文件的调用方式不同,那么我必须在 docker-compose.yml 中使用 env_file 参数。我的问题是如何在 Dockerfile 中使用 end vars,因为目前我无法使用它。所以我想检查一下我的方法有什么问题
    猜你喜欢
    • 2021-11-29
    • 2020-11-11
    • 1970-01-01
    • 2018-02-11
    • 2018-12-15
    • 1970-01-01
    • 2020-08-27
    • 2018-02-15
    • 2019-12-07
    相关资源
    最近更新 更多