gpt4 book ai didi

c# - Azure应用程序服务多容器-对内部容器的http请求(docker compose)

转载 作者:行者123 更新时间:2023-12-03 04:04:58 25 4
gpt4 key购买 nike

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

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

我现在想做的是能够将 http 请求从网络发送到我的 api,这是内部托管的另一个容器。我尝试了不同的网址,但无法成功发出请求。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

最佳答案

不幸的是,Azure Web App for Container 只能将一个容器公开到 Internet。这意味着如果您在Web App中部署多个容器,则只能从Internet访问一个容器。请参阅 Multi-container with Docker Compose 中有关如何知道哪个容器可通过互联网访问的详细信息.

更新:

当您在 docker-compose 文件中设置如下服务时:

redis:
image: redis
container_name: rediscache

下面是连接容器redis的代码示例:

[Route("api/[controller]")]
[ApiController]
public class NewsController : ControllerBase
{
// GET api/values
[HttpGet]
public async Task<ActionResult<IEnumerable<string>>> Get()
{
ConnectionMultiplexer connection = await ConnectionMultiplexer.ConnectAsync("redis");
var db = connection.GetDatabase();

//code to parse the XML
}
}

关于c# - Azure应用程序服务多容器-对内部容器的http请求(docker compose),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60418701/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com