在我的项目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映像中读取机密吗?
谢谢!
答案 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
。
设置构建参数SECRET= $(SECRET)
来替换ARG秘密
您还可以引用类似的thread。
答案 1 :(得分:0)
我正在使用“替换令牌”扩展程序来执行完全像这样的任务:https://marketplace.visualstudio.com/items?itemName=qetza.replacetokens
但是,将机密信息放入Dockerfile可能不是最好的主意。通常,当您实际执行容器时,通常会将机密信息或通常的运行时配置作为环境变量提供。
答案 2 :(得分:0)
我建议在运行时设置环境变量。如果要部署到Azure应用服务,则应用设置会自动作为环境变量注入到流程中。
然后可以将同一张图像用于多个环境。通过发布管道中的“部署Azure应用服务”任务,您可以更改每个环境的应用设置。
答案 3 :(得分:-3)
在发行版中,选择“部署azure应用服务”任务。在“应用程序和配置设置”选项下的“应用程序设置”部分提供必需的属性。