c# - 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发送请求
解决方案
在 docker-compose 文件中,orderapi 不公开任何端口。如果没有公开任何端口,它就无法处理请求。
通常,浏览器获取 html 并将请求直接发送到 API。
也许 orderapi 应该公开其他端口(例如 88),以便浏览器可以使用该端口从 API 获取数据。
推荐阅读
- python - 我在 tkinter python 的按钮中显示图像时遇到问题
- tensorflow - TensorFlow 的 np.isin 等价物
- android - 如何在 Flutter Module 中使用 Android 资源?
- c# - 如何从控制器中删除数据库表中的追随者
- python - Python按字典中的多个键分组
- td-engine - TDengine中count(tbname)的性能问题
- reactjs - 使用 react-chartjs-2 制作固定的 y 轴刻度
- c++ - swscanf 在铸造中的实现
- windows - 使用 PowerShelll 将 Microsoft Edge 设置为默认浏览器
- python - 旋转令牌的时间限制函数