在 Windows Docker 容器上安装 Azure 文件存储

Mounting Azure File Storage on a Windows Docker container

我在 Azure 中有一个 Windows 的 运行 容器,我正尝试将持久存储附加到该容器,但是,我找不到任何有关如何操作的文档所以。

Docker 文件:

FROM mcr.microsoft.com/dotnet/framework/aspnet:4.8-20190910-windowsservercore-ltsc2016
SHELL ["powershell"]
EXPOSE 443
WORKDIR /CompanyAPP
COPY WebPackage.zip .
RUN Expand-Archive WebPackage.zip . ; `
    Rename-Item ./CustomerWebConfigurator ./WebConfigurator; `
    Rename-Item ./Customer ./WebRoot; `
    Rename-Item ./CustomerWebService ./WebService; `
    Rename-Item ./CustomerWCFService ./WCFService; `
    rm WebPackage.zip
ARG BUILD
RUN Add-WindowsFeature Net-WCF-HTTP-Activation45;`
    Install-PackageProvider -Name Nuget -Force;`
    Set-PSRepository -Name PSGallery -InstallationPolicy Trusted;`
    Install-Module -Name AWSPowerShell;`
    New-WebApplication -Site 'Default Web Site' -Name 'App' -PhysicalPath c:\CompanyAPP\WebRoot; `
    New-WebApplication -Site 'Default Web Site' -Name 'AppWebService' -PhysicalPath c:\CompanyAPP\WebService; `
    New-WebApplication -Site 'Default Web Site' -Name 'AppWCFService' -PhysicalPath c:\CompanyAPP\WCFService; `
    New-WebApplication -Site 'Default Web Site' -Name 'AppWebConfigurator' -PhysicalPath c:\CompanyAPP\WebConfigurator; `
    Set-ItemProperty -Path 'HKLM:\SYSTEM\CurrentControlSet\Services\Dnscache\Parameters' -Name ServerPriorityTimeLimit -Value 0 -Type DWord;`
    $cert = New-SelfSignedCertificate -Subject self; `
    New-WebBinding -Protocol https -port 443 -name 'Default Web Site' -SSLFlags 0; `
    $binding = Get-WebBinding -protocol https; `
    $binding.AddSslCertificate($cert.Thumbprint, 'my');
RUN Set-WebConfiguration -PSPath 'IIS:\Sites\Default Web Site\App' -Filter '/system.web/customErrors' -Value @{mode='Off'};`
    write-host 'got here!'

存储是在 Azure 存储帐户中配置的,并且使用文件存储,我通过路径映射将其附加到配置中,但没有成功。

希望有人能给我指出一个好的方向来解决这个问题。

如果您使用 Azure 容器实例为 Windows 个容器部署,则 Azure 文件存储不支持持久卷。目前仅限于 Linux 个容器。您可以获取有关笔记的更多详细信息 here:

Mounting an Azure Files share is currently restricted to Linux containers.

更新:

根据评论中提供的消息,您将 Web 应用程序用于带有 Windows 图像的容器。在这种情况下,它支持将 Azure 文件共享挂载到 Windows 容器。您可以按照 Configure Azure Files in a Windows Container on App Service 中的步骤进行操作。

我可能来晚了,但直到今天我才偶然发现这个问题(即使在一年后仍然不支持在 Windows 容器中安装 Azure 文件卷),我发现了一个简单的解决方法。我会在这里分享这个,因为这个问题是搜索错误信息时排名靠前的结果之一。

您可以通过 SMB 安装 Azure 文件卷。您只需要 UNC、用户名和密码,您可以从 Azure 文件卷的属性中获取这些信息

所以我创建了一个小的startup.cmd

@echo off
net use z: %MNTUNC% %MNTPASS% /user:%MNTUSER%
"c:\program files\myapp\myapp.exe"

并将 startup.cmd 定义为 dockerfile

中的入口点
....

COPY ["startup.cmd", "c:/startup.cmd"]
ENTRYPOINT ["c:/startup.cmd"]

陷阱: 请注意,映射为 net use(或 New-PSDrive,如果您更喜欢 PowerShell)的驱动器仅对以下用户帐户可见命令执行的是哪一个,所以一定要用同一个用户挂载驱动器,这个用户是用来执行服务的。

您可以在部署期间设置环境变量的值,如下所述:

https://docs.microsoft.com/en-us/azure/container-instances/container-instances-environment-variables

例如使用YAML文件进行部署时,可以如下设置环境变量。使用 secureValue 使环境变量的值只能从容器内访问,并且这些值不会显示在例如 Azure 门户上的容器属性中。

....
containers:
  - name: mycontainer
    properties:
      environmentVariables:
        - name: 'MNTUNC'
          secureValue: '\myaccountname.file.core.windows.net\myvolume'
        - name: 'MNTPASS'
          secureValue: 'mysupersecretpassword'
        - name: 'MNTUSER'
          secureValue: 'Azure\myaccountname'