首页 > 解决方案 > Azure 应用服务多容器 - 对内部容器的 http 请求(docker compose)

问题描述

我已经使用 docker compose 文件(预览版)在 Azure 中部署了一个多容器应用程序服务。

Web 应用程序公开端口 80,因此如果我转到https://myproj.azurewebsites.net/,则会显示 Web 应用程序(它是唯一可用的公共端口)。

我现在想做的是能够从网络向我的 api 发送一个 http 请求,这是另一个内部托管的容器。我尝试了不同的网址,但我无法成功提出请求。api 容器启动成功,所以没有任何问题,我只是不知道使用哪个地址。

OrderApi Dockerfile

FROM mcr.microsoft.com/dotnet/core/aspnet:3.1-buster-slim AS base
WORKDIR /app
EXPOSE 80

FROM mcr.microsoft.com/dotnet/core/sdk:3.1-buster AS build
WORKDIR /src
COPY ["MyProj.OrderApi/MyProj.OrderApi.csproj", "MyProj.OrderApi/"]
COPY ["nuget.config", "MyProj.OrderApi/"]
RUN dotnet restore "v.OrderApi/MyProj.OrderApi.csproj" --configfile "MyProj.OrderApi/nuget.config"
RUN rm "MyProj.OrderApi/nuget.config"
COPY . .
WORKDIR "/src/MyProj.OrderApi"
RUN dotnet build "MyProj.OrderApi.csproj" -c Release -o /app/build

FROM build AS publish
RUN dotnet publish "MyProj.OrderApi.csproj" -c Release -o /app/publish

FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "MyProj.OrderApi.dll"]

生产环境中使用的 Docker 组合文件 (Azure)

version: '3.4'

services:
web:
    image: myproj.azurecr.io/myproj/web
    ports:
    - '80:80'

orderapi:
    image: myproj.azurecr.io/myproj/orderapi

端点测试

https://localhost/orderapi/api - ERR_CONNECTION_REFUSED

http://localhost/orderapi/api - 被 CORS 策略阻止(我确定 cors 在 api 中配置正确)

https://host.docker.internal/orderapi/api - ERR_CONNECTION_TIMED_OUT

orderapi/api - 将当前站点添加为 baseurl.. 尝试向 https://mysite.azurewebsites.net/orderapi/api发送请求

http://host.docker.internal/orderapi/api - 此请求已被阻止;内容必须通过 HTTPS 提供

host.docker.internal/orderapi/api - 将当前站点添加为 baseurl.. 尝试向 https://mysite.azurewebsites.net/host.docker.internal/orderapi/api发送请求

标签: c#azuredocker.net-coredocker-compose

解决方案


在 docker-compose 文件中,orderapi 不公开任何端口。如果没有公开任何端口,它就无法处理请求。

通常,浏览器获取 html 并将请求直接发送到 API。

也许 orderapi 应该公开其他端口(例如 88),以便浏览器可以使用该端口从 API 获取数据。


推荐阅读