【问题标题】:Docker Container for .net 5.0 Web API not getting accessible.net 5.0 Web API 的 Docker 容器无法访问
【发布时间】:2021-11-10 04:26:13
【问题描述】:

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

我的 Docker 文件。

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:00000000-0000-0000-0000-000000000000 [05:58:37 警告] 无法绑定到 IPv6 环回接口上的 localhost:5000: '无法分配请求的地址'。 [05:58:37 INF] 现在收听: localhost:5000 [05:58:37 INF] 应用程序已启动。按 Ctrl+C 到 关掉。 [05:58:37 INF] 托管环境:生产 [05:58:37 INF] 内容根路径:/app root@labubuntu20-01:/home/spaadmin#

【问题讨论】:

  • 容器的日志是怎么说的?
  • 你没有EXPOSE端口6000。
  • 我尝试暴露 6000 端口但没有成功
  • ClientConnectionId:00000000-0000-0000-0000-000000000000 [05:58:37 WRN] 无法绑定到 IPv6 环回接口上的localhost:5000:“无法分配请求的地址”。 [05:58:37 INF] 现在收听:localhost:5000 [05:58:37 INF] 应用程序已启动。按 Ctrl+C 关闭。 [05:58:37 INF] 托管环境:生产 [05:58:37 INF] 内容根路径:/app root@labubuntu20-01:/home/spaadmin#
  • 以上是我在运行命令 docker container logs container id 时得到的输出。

标签: .net docker dockerfile containers


【解决方案1】:

基于此错误“无法在 IPv6 环回接口上绑定到 localhost:5000:'无法分配请求的地址”

要解决此问题,请在 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

参考:Unable to bind to http://localhost:5000 on the IPv6 loopback interface: 'Cannot assign requested address'.

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-07-18
    • 1970-01-01
    • 1970-01-01
    • 2021-09-12
    • 2020-06-05
    • 2016-03-18
    • 2018-08-09
    • 1970-01-01
    相关资源
    最近更新 更多