Я пытаюсь подключить общий файловый ресурс azure к службе Веб-приложение для контейнеров (linux). Это веб-приложение api .net Core 3 с угловым интерфейсом. Контейнер приложения отлично работает локально, когда я подключаю локальный диск для загрузки тех же файлов, что и в общей папке.
согласно docker docs for azure file share Я должен установить для моего файла docker compose следующий вид:
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
В конфигурации своего веб-приложения я создал следующий файл для монтирования:
Я могу подтвердить, что общий файловый ресурс содержит файл, указанный в переменных среды: 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:
попытаться добавить монтирование файлового ресурса с помощью лазурного cli. Я использовал следующую команду, чтобы добавить монтирование общего файлового ресурса в свое веб-приложение:
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, а не через сам контейнер, я вижу, что монтирование файла существует и называется безопасностью в корне веб-приложения.
РЕДАКТИРОВАТЬ 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"
}
}
Вот как выглядят мои настройки монтирования файлов на лазурном портале при настройке - ›сопоставления путей:
Внутри монтирования файла находится папка с именем security, в которой находится файл сертификата.
Спасибо Чарльзу за помощь, и я надеюсь, что это поможет кому-то другому!
- mcpdata:"/security:/security"
или просто- mcpdata:/security
- person Thanh Nguyen Van   schedule 12.10.2020- mcpdata:"/security/security
не работал и-mcpdata:/security
тоже - person J King   schedule 13.10.2020