如何通过Azure DevOps在Dockerfile中设置环境变量

时间:2020-01-27 14:22:13

标签: azure docker azure-devops dockerfile

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

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

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

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

ENV SA_PASSWORD=$(SA_PASSWORD)

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

这也是传递秘密的安全方法吗?有人可以从Docker映像中读取机密吗?

谢谢!

4 个答案:

答案 0 :(得分:5)

您可以设置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 

由于buildandpush命令不能接受参数,因此可以分别使用停靠构建任务和停靠推送任务。并在管道中设置变量SECRET

enter image description here

设置构建参数SECRET= $(SECRET)来替换ARG秘密

enter image description here

您还可以引用类似的thread

答案 1 :(得分:0)

我正在使用“替换令牌”扩展程序来执行完全像这样的任务:https://marketplace.visualstudio.com/items?itemName=qetza.replacetokens

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

答案 2 :(得分:0)

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

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

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

答案 3 :(得分:-3)

在发行版中,选择“部署azure应用服务”任务。在“应用程序和配置设置”选项下的“应用程序设置”部分提供必需的属性。