Sug*_*mar 16 docker dockerfile docker-compose asp.net-core docker-network
我们有一个 WPF 应用程序,它将调用一个名为 API-1 的 Web API,该 API 在 Docker 容器中运行。我还有另一个名为 API-2 的 API,它也在 docker 中运行,但在不同的容器中。
每当应用程序发生 API-1 调用时,API-1 都会执行一些逻辑并尝试向 API-2 发出发布请求。
现在,我的问题是,对 API-2 的 post 请求总是返回Cannot allocate requested address (localhost:XXXX)。
如果我尝试不使用 docker,效果很好。此外,对每个 API 的单独请求也可以正常工作(使用 POSTMAN)
仅当 API 部署在 docker 中时才会出现此问题。我使用 docker-compose 来创建容器。我创建了一个 docker 网桥,并将其分配给 docker-compose.yml 文件中的相应 API。
这是我的 docker-compose 文件以及两个 API 的 docker 文件。
Docker-Compose.yml
version: "3.7"
networks :
localdev:
name: localdev
external: true
services:
api-01:
build:
context: .
dockerfile: api-01/Dockerfile
restart: always
container_name: "api-01"
ports:
- "8082:80"
environment:
ASPNETCORE_ENVIRONMENT: "Development"
networks:
- localdev
api-02:
build:
context: .
dockerfile: api-02/Dockerfile
restart: always
container_name: "api-02"
ports:
- "8083:80"
environment:
ASPNETCORE_ENVIRONMENT: "Development"
networks:
- localdev
Run Code Online (Sandbox Code Playgroud)
DockerFile(API-1)
FROM mcr.microsoft.com/dotnet/aspnet:5.0-buster-slim AS base
WORKDIR /app
EXPOSE 80
FROM mcr.microsoft.com/dotnet/sdk:5.0-buster-slim AS build
WORKDIR /src
COPY ["api-01/api-01.csproj", "api-01/"]
COPY ["CommonEntities/CommonEntities.csproj", "CommonEntities/"]
RUN dotnet restore "api-01/api-01.csproj"
COPY . .
WORKDIR "/src/api-01"
RUN dotnet build "api-01.csproj" -c Release -o /app/build
FROM build AS publish
RUN dotnet publish "api-01.csproj" -c Release -o /app/publish
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "api-01.dll"]
Run Code Online (Sandbox Code Playgroud)
DockerFile(API-2)
来自 mcr.microsoft.com/dotnet/aspnet:5.0-buster-slim AS 基础 WORKDIR /app EXPOSE 80
FROM mcr.microsoft.com/dotnet/sdk:5.0-buster-slim AS build
WORKDIR /src
COPY ["api-02/api-02.csproj", "api-02/"]
COPY ["CommonEntities/CommonEntities.csproj", "CommonEntities/"]
RUN dotnet restore "api-02/api-02.csproj"
COPY . .
WORKDIR "/src/api-02"
RUN dotnet build "api-02.csproj" -c Release -o /app/build
FROM build AS publish
RUN dotnet publish "api-02.csproj" -c Release -o /app/publish
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "api-02.dll"]
Run Code Online (Sandbox Code Playgroud)
我不确定我在这里缺少什么!我已经尝试了互联网上的大部分解决方案,但没有任何效果。
use*_*381 12
使用host.docker.internal
而不是localhost
对我有用。
来源:https ://hamy.xyz/labs/docker-dotnet-core-cannot-assign-requested-address
如果我想在两个不同容器中的两个 API 之间进行通信,看起来我需要使用 {DOCKER_IP} 而不是“localhost”。
当我将发布请求更改为“http://{My_PC_IP_Address}:8082”后,请求成功。
感谢 David 将我重定向到正确的文档https://docs.docker.com/network/bridge/
归档时间: |
|
查看次数: |
33429 次 |
最近记录: |