【问题标题】:Azure DevOps copying .env file to docker imageAzure DevOps 将 .env 文件复制到 docker 映像
【发布时间】:2026-01-19 09:40:02
【问题描述】:

我正在尝试使用 Azure DevOps 构建管道,其中一项任务是将 .env 文件复制到 docker 映像中。

Dockerfile 如下所示:

FROM node

WORKDIR /nodebuild
ADD frontend /nodebuild

# Set environment variables from .env during node build
# so that the app uses the production location for static files
ADD .env /nodebuild
RUN export $(grep -v '^#' .env | xargs) && npm install && npm audit fix && npm run build

但是,由于.env 包含我的秘密,我使用Secure Files 将文件存储在 Azure DevOps 中。

现在我试图从我的 Dockerfile 中引用这个文件,我该怎么做?

【问题讨论】:

  • 此机制设计用于 > 使用 Secure Files 库在服务器上存储文件,例如签名证书、Apple Provisioning Profiles、Android Keystore 文件和 SSH 密钥,而无需将它们提交到您的源存储库.安全文件在 Azure Pipelines 的“库”选项卡中定义和管理。如果你在那里保密,你不应该将它们构建到 Docker 映像中。
  • @KrzysztofMadej 当.env 是一个大文件时,我建议使用安全文件来管理它。构建映像的某些过程需要秘密(例如,与数据库相关的活动)。在构建过程结束时,我们可以从图像中删除.env。至于怎么做,请看下面的答案。

标签: docker azure-devops


【解决方案1】:

您可以添加download secure file 任务以将 .env 文件下载到代理机器。

下载后,使用在任务上设置的名称值(或经典编辑器中的“参考名称”)来引用代理计算机上安全文件的路径。例如,如果任务的名称为 mySecureFile,则其路径可以在管道中作为 $(mySecureFile.secureFilePath) 引用。或者,可以在 $(Agent.TempDirectory) 给出的目录中找到下载的安全文件

然后您可以添加Copy files task 将上述任务下载的 .env 文件复制到 docker 构建上下文中。下面的例子:

steps:
- task: DownloadSecureFile@1
  displayName: 'Download secure file'
  inputs:
    secureFile: .env

- task: CopyFiles@2
  displayName: 'Copy Files to: $(System.DefaultWorkingDirectory)'
  inputs:
    SourceFolder: '$(Agent.TempDirectory)'
    Contents: .env
    TargetFolder: '$(System.DefaultWorkingDirectory)'

如果文件夹 $(System.DefaultWorkingDirectory)(即c:\agent_work\1\s)是 docker 构建上下文。然后,您可以从 Dockerfile 中引用 .env 文件。

【讨论】:

  • 谢谢!这正是我刚刚所做的,而且效果很好!