Функция Azure, работающая из контейнера Docker, содержит разные файлы внутри

Как видно на изображении ниже, содержимое локального контейнера Docker не соответствует содержимому, отправленному в приложение-функцию Azure. Я изучаю приложение функции Azure с Kudu и использую docker run для взаимодействия с локальным контейнером.

Это проблема, так как у меня есть внешняя библиотека, которую я импортирую с помощью DllImport, поэтому код никогда не сможет найти фактический файл библиотеки, независимо от того, куда я его поместил.

Чем это вызвано и какое решение?

Это последний слой моего Dockerfile:

FROM mcr.microsoft.com/azure-functions/dotnet:2.0
ENV AzureWebJobsScriptRoot=/home/site/wwwroot \
    AzureFunctionsJobHost__Logging__Console__IsEnabled=true

COPY --from=installer ["/home/site/wwwroot", "/home/site/wwwroot"]
COPY --from=compile_engine ["/app/tmp/src/libml_inference_engine.so", "/azure-functions-host"]
COPY --from=compile_engine ["/app/tmp/src/libml_inference_engine.so", "/bin"]
COPY --from=compile_engine ["/app/tmp/src/libml_inference_engine.so", "/home/site/wwwroot"]

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
1 181
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Когда вы создаете приложение-функцию из пользовательского образа докера, путь /home/site/wwwroot внутри контейнера не совпадает с путем /home/site/wwwroot в куду. Между куду и контейнером из вашего пользовательского образа есть два разных контейнера. Таким образом, вы не можете видеть одни и те же вещи на обоих одинаковых путях.

Решение состоит в том, что вы можете установить переменную среды WEBSITES_ENABLE_APP_SERVICE_STORAGE как true. Затем функция будет использовать путь /home/site/wwwroot, покрывающий тот же путь внутри пользовательского контейнера. Таким образом, вы увидите одни и те же вещи в обоих местах. Он также показывает все вещи этого пути в портале:

Почему куду видит на этом пути что-то другое? Он просто игнорирует файлы или создает свой собственный контейнер?

Eduard G 23.12.2020 16:31

Я попытался установить для WEBSITES_ENABLE_APP_SERVICE_STORAGE значение true, теперь wwwroot содержит «host.json», но ни одна из исходных dll, которые я ожидал увидеть, как в образе докера. Кроме того, функций теперь нет.

Eduard G 23.12.2020 17:44

@EduardG Как я уже сказал в ответе, куду — это другой контейнер, отличный от вашего пользовательского контейнера изображений. И когда вы установите для переменной среды WEBSITES_ENABLE_APP_SERVICE_STORAGE значение true, тогда путь куду /home/site/wwwroot будет охватывать тот же путь в вашем пользовательском контейнере изображений.

Charles Xu 24.12.2020 02:34

Поскольку других ответов нет, а ваш проливает некоторый свет на тему, я принял его как ответ. Я все еще не понимаю, почему после включения этого параметра конфигурации локальный образ докера не соответствует тому, который был загружен в Azure, поскольку из вашего комментария я понимаю, что если для него установлено значение true, то так и должно быть.

Eduard G 24.12.2020 14:30

@EduardG Вам нужно понять смысл. Путь в Kudu будет охватывать путь в вашем пользовательском контейнере изображений. Итак, вам нужно загрузить файлы в путь в куду. Затем вы можете увидеть файлы внутри вашего пользовательского контейнера изображений.

Charles Xu 25.12.2020 03:45

Я гонялся за красными селедками. Часть моего вопроса заключалась в том, почему DllImport не находит файлы, которые я туда вставил, и я подумал, что вы имели в виду, что Kudu каким-то образом заменил эти файлы, но на самом деле он находил их, но я скомпилировал их неправильно. Для тех, кто читает это: в моем случае приложение находилось в /home/site/wwwroot/bin, а узел функции azure — в /azure-functions-host/something.dll, DllImport просматривал папку bin, но однажды вы запускаете функцию, она запустится в корне "/" в качестве рабочего каталога. DllImport не сможет сказать, что не может найти файл, если он скомпилирован для неправильной архитектуры.

Eduard G 06.01.2021 18:19

@EduardG Я знаю, что ваше приложение находится по пути /home/site/wwwroot контейнера. Как вы понимаете, что я сказал в ответ?

Charles Xu 07.01.2021 02:37

Думаю, мы где-то разошлись, так как вы посоветовали мне загружать файлы в путь в куду, а я в итоге просто добавил их в образ докера.

Eduard G 07.01.2021 12:10

Другие вопросы по теме