подключить общий файловый ресурс Azure к веб-приложению для контейнеров Linux с помощью docker-compose

Я пытаюсь подключить общий файловый ресурс 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 не найден.

ЧТО Я УСТАЛО:

  1. Поскольку контейнер не работает, я не могу подключиться к нему по ssh, чтобы проверить файлы. Поэтому я извлекаю образ из реестра контейнеров Azure локально, а затем выполняю docker export -o dump.tar. Затем я извлекаю файлы, но папка безопасности не создается.
  2. Я также попытался просто сослаться на именованный файловый ресурс непосредственно в файле компоновки докеров, удалив определение монтирования верхнего уровня из файла компоновки докеров. удаленный код, показанный ниже:
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, в которой находится файл сертификата.

Спасибо Чарльзу за помощь, и я надеюсь, что это поможет кому-то другому!


comment
- mcpdata:"/security:/security" или просто - mcpdata:/security   -  person Thanh Nguyen Van    schedule 12.10.2020
comment
@ThanhNguyenVan - mcpdata:"/security/security не работал и -mcpdata:/security тоже   -  person J King    schedule 13.10.2020


Ответы (1)


Шаги, которые вы выполнили, предназначены для ACI, а не для веб-приложения. Чтобы подключить общий файловый ресурс Azure к веб-приложению Azure для контейнера, вам просто нужно выполнить шаги, указанные в Свяжите хранилище с вашим приложением.

И вам нужно изменить файл docker-compose на volumes:

Из:

volumes:
       - mcpdata:"/security:/security"

В:

volumes:
       - custom-id:/security/security/

Пользовательский идентификатор - это то, что вы используете в команде CLI.

person Charles Xu    schedule 12.10.2020
comment
как мне получить собственный идентификатор файлового ресурса, если он уже был создан? Я попытался использовать список учетных записей конфигурации cli и az webapp, но он не поддерживает пользовательский идентификатор. Кроме того, когда я использую команду azure cli для проверки хранилища, она не работает для слота развертывания: az webapp config storage-account list --resource-group ‹rg-name› --name ‹appName / development› - person J King; 13.10.2020
comment
добавление --slot development заставило команду работать выше. - person J King; 13.10.2020
comment
@JKing Пользовательский идентификатор - это значение, которое вы используете при выполнении команды для создания ссылки. Вы сами устанавливаете. Просто нужно, чтобы пользовательский идентификатор оставался неизменным. - person Charles Xu; 13.10.2020
comment
@JKing Путь монтирования в команде также должен совпадать с файлом docker-compose. Это должно быть /security/security. - person Charles Xu; 15.10.2020
comment
спасибо Чарльз, этот последний комментарий был недостающим, я изменил путь монтирования для монтирования файла на / security / security /, и файл загружается - person J King; 15.10.2020