Azure ファイル共有をWeb App for Containers (Linux)サービスにマウントしようとしています。これは、角度のあるフロント エンドを備えた .net Core 3 Web API アプリです。ファイル共有とまったく同じファイルをロードするためにローカル ドライブをマウントすると、アプリ コンテナーは完全にローカルで実行されます。
azure ファイル共有の docker docs によると、docker 構成ファイルを次のように設定する必要があります。
version: '3.4'
services:
webui:
image: ${DOCKER_REGISTRY-}webui
build:
context: .
dockerfile: src/WebUI/Dockerfile
environment:
- "UseInMemoryDatabase=false"
- "ASPNETCORE_ENVIRONMENT=Production"
- "ConnectionStrings__DefaultConnection=Server="
- "ASPNETCORE_Kestrel__Certificates__Default__Path=/security/mycertfile.pfx"
- "ASPNETCORE_Kestrel__Certificates__Default__Password=Your_password123"
ports:
- "5000:5000"
- "5001:5001"
volumes:
- mcpdata:"/security:/security"
restart: always
volumes:
mcpdata:
driver: azure_file
driver_opts:
share_name: sharename
storage_account_name: storageaccountname
Web アプリの構成で、次のファイル マウントを作成しました。
ファイル共有に、環境変数で参照されているファイルが含まれていることを確認できます: mcpdata/security/mycertfile.pfx
問題:
コンテナーがサービスによって実行されると、エラーが発生します。
System.InvalidOperationException: 証明書の読み込み中にエラーが発生しました。ファイル '/security/mycert.pfx' が見つかりませんでした。
私が疲れたもの:
- コンテナーに障害が発生したため、コンテナーに ssh してファイルを確認することはできません。そこで、Azure コンテナー レジストリからイメージをローカルにプルしてから、docker export -o dump.tarを実行します。次に、ファイルを抽出しますが、セキュリティ フォルダーは作成されません。
- また、ドッカー構成ファイルから最上位のマウント定義を削除することにより、名前付きファイル共有をドッカー構成ファイルで直接参照しようとしました。以下に示すコードを削除しました。
volumes:
mcpdata:
driver: azure_file
driver_opts:
share_name: sharename
storage_account_name: storageaccountname
質問:
Azure ファイル共有をコンテナーに接続したり、コンテナーに障害が発生したときにファイルがマウントされている場所を確認したりできますか?
編集1:
azure cli を使用してファイル共有マウントを追加しようとします。次のコマンドを使用して、ファイル共有マウントを Web アプリに追加しました。
az webapp config storage-account add --resource-group "rgname" --name "appname" --slot development --custom-id fsmount001 --storage-type AzureFiles --share-name "sname" --account-name "aname" --access-key "key" --mount-path /
このコマンドは機能し、ファイル マウントを作成しますが、/security/ フォルダーに証明書ファイルが見つからないというエラーが引き続き表示されます。
コンテナー自体ではなく kudu を介してアプリにアクセスすると、ファイル マウントが存在し、Web アプリのルートに security という名前が付けられていることがわかります。
編集2:解決策
次のコマンドでファイル マウントをセットアップします。
az webapp config storage-account add --resource-group "rgname" --name "appname" --slot development --custom-id fsmount001 --storage-type AzureFiles --share-name "sname" --account-name "aname" --access-key "key" --mount-path /security/security/
docker compose では、次を使用します。
volumes:
- fsmount001: /security:/security
appsettings.Production.json 内:
"IdentityServer": {
"Key": {
"Type": "File",
"FilePath": "/security/mycert.pfx",
"Password": "password"
}
}
これは、設定 -> パス マッピングの下の azure ポータルで私のファイル マウント設定がどのように見えるかです。
ファイル マウント内には、証明書ファイルを含む security というフォルダーがあります。
チャールズの助けに感謝します。これが他の誰かに役立つことを願っています!