Я создал функцию azure, которая предоставляет API, который используется в другом проекте. Я хотел бы позволить команде, которая работает над интерфейсом, иметь изображение Docker нашего API, чтобы помочь им в их разработке. Я упаковал свою функцию azure, используя файл Dockerfile, который создается при запуске func init LocalFunctionsProject --worker-runtime dotnet --docker
согласно этого руководства
Это приводит к следующему содержимому файла Dockerfile:
FROM mcr.microsoft.com/dotnet/core/sdk:2.2 AS installer-env
COPY . /src/dotnet-function-app
RUN cd /src/dotnet-function-app && \
mkdir -p /home/site/wwwroot && \
dotnet publish *.csproj --output /home/site/wwwroot
FROM mcr.microsoft.com/azure-functions/dotnet:2.0
ENV AzureWebJobsScriptRoot=/home/site/wwwroot \
AzureFunctionsJobHost__Logging__Console__IsEnabled=true
COPY --from=installer-env ["/home/site/wwwroot", "/home/site/wwwroot"]
Затем я создал файл docker-compose.yml
в проекте внешнего интерфейса:
version: "3.7"
services:
frontend:
image: frontend:latest
build: .
ports:
- "3000:3000"
env_file:
- frontend.docker.env
backend:
image: backend:latest
env_file:
- backend.docker.env
ports:
- "8080:80"
Это успешно раскручивает два контейнера: один с внешним интерфейсом, а другой с серверной частью. Внутри моего frontend.docker.env
я установил свою переменную так, чтобы она указывала на backend
, чтобы вызовы из внешнего интерфейса были направлены на http://backend/api/myendpoint
Однако именно здесь все не работает, я получаю проблему CORS:
То, что я пробовал :
- Каждый раз, когда я вызываю свой бэкэнд с открытого порта 8080 из Postman, все работает нормально. Я попытался вручную добавить заголовок
Access-Control-Allow-Origin
со значением *
в свой ответ, который, как я могу проверить, поступает в Postman. Однако передняя часть по-прежнему сталкивается с проблемой CORS.
Запрос на кросс-источник заблокирован: та же политика происхождения запрещает чтение удаленного ресурса по адресу http://backend/api/myendpoint. (Причина: запрос CORS не выполнен)
Мой другой подход - изменить
web.config
внутри файла
azure-functions-host
вручную, выполнив следующую инструкцию в моем Dockerfile:
RUN sed -i 's/<customHeaders>/<customHeaders><add name="Access-Control-Allow-Origin" value="*" \/><add name="Access-Control-Allow-Headers" value="Content-Type" \/><add name="Access-Control-Allow-Methods" value="GET, POST, PUT, DELETE, OPTIONS" \/>/g' azure-functions-host/web.config
После этого я вижу следующие заголовки, поступающие из ответа в Postman:
Access-Control-Allow-Headers = X-Requested-With, content-type
Access-Control-Allow-Methods = GET, POST, OPTIONS, PUT, PATCH, DELETE
Access-Control-Allow-Origin = *
Однако я все еще сталкиваюсь с той же проблемой. Почтальон работает, интерфейс не работает ... Вы хоть представляете, в чем может быть проблема или как правильно установить CORS