Docker容器无法访问.net 5.0 Web API



我已经写了一个docker文件来构建我的。net 5.0 web API,我能够构建它并推送它,但是,我无法访问它。

My Docker File.

FROM mcr.microsoft.com/dotnet/aspnet:5.0 AS base
WORKDIR /app
EXPOSE 80
FROM mcr.microsoft.com/dotnet/sdk:5.0 AS build
WORKDIR /src
COPY ["API/WebUI/Summit.API.csproj", "API/WebUI/"]
COPY ["Application/Summit.Application.csproj", "Application/"]
COPY ["Domain/Shared/Summit.Domain.csproj", "Domain/Shared/"]
COPY ["Domain/SqlKata.Execution/SqlKata.Execution.csproj", 
"Domain/SqlKata.Execution/"]
COPY ["Domain/QueryBuilder/QueryBuilder.csproj", "Domain/QueryBuilder/"]
COPY ["Infrastructure/Summit.Infrastructure.csproj", "Infrastructure/"]
RUN dotnet restore "API/WebUI/Summit.API.csproj"
COPY . .
WORKDIR "/src/API/WebUI"
RUN dotnet build "Summit.API.csproj" -c Release -o /app/build

FROM build AS publish
RUN dotnet publish "Summit.API.csproj" -c Release -o /app/publish

FROM mcr.microsoft.com/dotnet/aspnet:5.0 AS runtime
WORKDIR /app
COPY --from=publish /app/publish .
ENV ASPNETCORE_URLS http://*:6000
ENTRYPOINT ["dotnet", "Summit.API.dll"]
在构建解决方案后,我使用下面的命令创建一个容器。
docker container run -itd --name WebAPIServer -p 6000:6000 image name.

但是当我试图用http://localhost:6000访问它时,我得到一个错误,这个网站无法到达。

我没有使用端口5000,因为我的docker注册表正在该端口上运行。

容器的日志显示:

ClientConnectionId:0000000 -0000000 -0000000 -0000000 -000000000000 [05:58:37 WRN]无法在IPv6 loopback接口上绑定localhost:5000。"无法分配请求的地址"。[05:58:37]现在听:localhost:5000 [05:58:37 INF]应用程序启动。按"Ctrl+C"键关闭。[05:58:37]主机环境:生产[05:58:37INF]内容根路径:/app root@labubuntu20-01:/home/spaadmin#

基于此错误" Cannot bind to localhost:5000 on IPv6 loopback interface: 'Cannot assign requested address "

要解决这个问题,在Dockerfile.develop文件顶部的其他ENV声明下面添加代码ENV ASPNETCORE_URLS=http://+:80。

打开你的vi Dockerfile,添加下面的ENV.

Dockerfile.develop后:

FROM mcr.microsoft.com/dotnet/core/sdk:3.1
ARG BUILD_CONFIGURATION=Debug
ENV ASPNETCORE_ENVIRONMENT=Development
ENV DOTNET_USE_POLLING_FILE_WATCHER=true  
ENV ASPNETCORE_URLS=http://+:80  
EXPOSE 80

参考:无法绑定到IPv6环回接口上的http://localhost:5000: '无法分配请求的地址'。

COPY ["Domain/SqlKata.Execution/SqlKata.Execution.csproj", 
"Domain/SqlKata.Execution/"]

将上面的语句改为单行,可能会抛出错误,因为只有参数在传递,应该是这样的

COPY ["Domain/SqlKata.Execution/SqlKata.Execution.csproj", "Domain/SqlKata.Execution/"]

最新更新