【问题标题】:How to set environment variables in Dockerfile via Azure DevOps如何通过 Azure DevOps 在 Dockerfile 中设置环境变量
【发布时间】:2020-01-27 14:22:13
【问题描述】:

在我的项目 Docker 文件中,我有一些环境变量,如下所示:

ENV ACCEPT_EULA=Y
ENV SA_PASSWORD=Password
ENV MSSQL_PID=Developer
ENV MSSQL_TCP_PORT=1433 

我想在这里将密码作为我的管道中设置的环境变量传递。

在 Azure DevOps 中,我有两个管道。一种用于构建解决方案,另一种用于构建 docker 映像并将其推送到 DockerHub。在这两个管道中都有设置变量的选项: 我已经在两个管道中设置了密码,并在 Dockerfile 中编辑了我的密码,如下所示:

ENV SA_PASSWORD=$(SA_PASSWORD)

但这似乎不起作用。将环境变量从 Azure DevOps 传递到 Docker 映像的正确方法是什么?

另外,这是一种安全的秘密传递方式吗?有什么方法可以从 Docker 映像中读取机密信息?

谢谢!

【问题讨论】:

    标签: azure docker azure-devops dockerfile


    【解决方案1】:

    您可以设置 ARG var_name 并将 ENV 引用到 ARG 变量。然后你可以在docker构建镜像时替换那些变量$ docker build --build-arg var_name=$(VARIABLE_NAME)

    例如在 dockerfile 中添加 ARG,并让 ENV 变量引用它:

    ARG SECRET
    ENV ACCEPT_EULA=Y
    ENV SA_PASSWORD=$SECRET
    ENV MSSQL_PID=Developer
    ENV MSSQL_TCP_PORT=1433 
    

    你可以分别使用dock build task和dock push task,因为buildandpush命令不能接受参数。并在您的管道中设置一个变量SECRET

    设置 Build Arguments SECRET= $(SECRET) 来替换 ARG SECRET

    您也可以参考类似的thread

    【讨论】:

    • 根据您的秘密的“秘密”程度,将它们烘焙到任何图像中对安全来说都不是很好。按照@Rémi 的建议在运行时传递它们
    【解决方案2】:

    我正在使用 Replace Tokens 扩展来完成类似这样的任务:https://marketplace.visualstudio.com/items?itemName=qetza.replacetokens

    但是,将秘密放入 Dockerfile 可能不是最好的主意。通常,当您实际执行容器时,您会提供秘密或通常运行时配置作为环境变量。

    【讨论】:

      【解决方案3】:

      我建议在运行时设置环境变量。如果要部署到 Azure 应用服务,应用设置会自动作为环境变量注入到进程中。

      然后,您可以将同一个图像用于多个环境。通过发布管道中的部署 Azure 应用服务任务,您可以更改每个环境的应用设置。

      https://docs.microsoft.com/en-us/azure/app-service/configure-custom-container?pivots=container-linux#configure-environment-variables

      【讨论】:

        【解决方案4】:

        在发布时,选择部署 Azure 应用服务任务。在应用程序和配置设置选项下的应用程序设置部分提供所需的属性。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2022-10-05
          • 1970-01-01
          • 2019-10-09
          • 1970-01-01
          • 2019-09-11
          • 2020-04-02
          • 2019-07-21
          • 2021-07-19
          相关资源
          最近更新 更多