当前位置: 首页 > 知识库问答 >
问题:

ASP.NET指定端口上无法访问Core Docker

阙弘博
2023-03-14

我无法访问内部运行 ASP.NET Core 3.1 应用程序的容器。目标是在端口 5000 上的容器中运行应用程序。当我使用标准VS配置文件在本地运行它时,我导航到 http://localhost:5000/swagger/index.html 以加载swaggerUI。我想使用泊坞窗实现同样的事情。

复制我的问题的步骤:

>

  • 添加具有暴露的5000端口和ENV ASPNETCORE_url变量的dockerfile:

    FROM mcr.microsoft.com/dotnet/core/aspnet:3.1 AS base
    WORKDIR /app
    ENV ASPNETCORE_URLS=http://+:5000
    EXPOSE 5000
    
    FROM mcr.microsoft.com/dotnet/core/sdk:3.1 AS build
    WORKDIR /src
    COPY ["myapp/myapp.csproj", "myapp/"]
    RUN dotnet restore "myapp/myapp.csproj"
    COPY . .
    WORKDIR "/src/myapp/"
    RUN dotnet build "myapp.csproj" -c Release -o /app/build
    
    FROM build AS publish
    RUN dotnet publish "myapp.csproj" -c Release -o /app/publish
    
    FROM base AS final
    WORKDIR /app
    COPY --from=publish /app/publish .
    ENTRYPOINT ["dotnet", "myapp.dll"]
    

    树立形象

     docker build -t myapp .
    

    运行docker镜像:

     docker run myapp -p 5000:5000
    

    使用特定docker文件运行上述命令会导致以下结果:

        [21:28:42 INF] Starting host.
        [21:28:42 INF] Now listening on: http://[::]:5000
        [21:28:42 INF] Application started. Press Ctrl+C to shut down.
        [21:28:42 INF] Hosting environment: Production
        [21:28:42 INF] Content root path: /app
    

    但是,我无法使用http://localhost:5000/swagger/index.html因为ERR_CONNECTION_REJECTED-

    我确实进入容器检查主机是否正在运行,使用:

    docker exec -it containerId /bin/bash
    cd /app
    dotnet myapp.dll
    

    导致以下错误的原因:

    Unable to start Kestrel.
    System.IO.IOException: Failed to bind to address http://[::]:5000: address already in use.
    

    结论是使用容器内部的端口,应用程序处于活动状态,只是无法从外部访问。我不知道如何进入它。请给我指出正确的方向。

    更新问题已解决,答案发布在下面。但是解释为什么需要它以及它是如何工作的会很好!

  • 共有2个答案

    逑何平
    2023-03-14

    我通过以下方式解决了相同的问题:

    1. 在<code>appsettings中添加了以下内容。json强制Kestrel监听端口80
    "Kestrel": {
      "EndPoints": {
        "Http": {
          "Url": "http://+:80"
        }
      }
    }
    
    ENV ASPNETCORE_URLS=http://+:80
    
    EXPOSE 80
    
    ENTRYPOINT ["dotnet", "EntryPoint.dll"]
    
    docker run -p 8080:80 <image-name>:<tag>
    
    赵永新
    2023-03-14

    为了解决这个问题,我不得不手动将“--server.urls”添加到入口点,如下所示:

    ENTRYPOINT ["dotnet", "myapp.dll", "--server.urls", "https://+:5000"]
    
     类似资料:
    • 内网搭建后 加入端口访问 不可行吗 公司要求必须加入端口访问内网,然而现在目前再用的网站做迁移的时候发现很多端口 我批量开启后 测试无法访问 路由器映射 已经完成 公司用的专线 有动态公网地址 外网中可以访问面板地址也可以正常操作 唯独部署的 项目端口无法访问 ng的80端口 没动 创建的空间端口 8080 1070 这种 也无法访问 折腾不来

    • 我是一个码头工人,我在前几天阅读了如何使用它的官方教程。我决定将我非常简单的spring-boot应用程序作为服务部署到集群中,但我无法从外部访问它。顺便说一下,当我用docker run启动docker时,容器是可以访问的。 所以我的春靴tomcat正在收听8081。 Dockerfile: docker-compose.yml: 我部署了两个服务,一个可视化程序和一个Spring引导应用程序。

    • dockerfile: docker撰写文件: 应用程序属性文件: 当我运行docker-comush up时,它将创建一个数据库容器和一个连接到数据库容器的应用程序容器。 但是spring应用程序容器在启动过程中遇到了一些错误: org.postgresql.util.PSQL异常:连接到localhost:5432被拒绝。检查主机名和端口是否正确,邮政局长是否接受TCP/IP连接。 显示数据库

    • 嗨,我知道有几个线程对此,但没有一个解决方案似乎对我有效。 我有一个ASP.NET网站项目,我正试图加载并在Visual Studio中发布该项目。然而,当我加载项目时,我得到了错误: 到目前为止我所尝试的: 获得C://Windows/system32/inetsrv/config的所有权 在我的project_name.csproj文件中设置 返回到旧的team foundation serv

    • 我下载的dist文件夹重命名为swagger并更新index.html但我无法通过我的应用程序端口访问用户界面:http://localhost:${port}/${contextPath}/swagger/index.html 但如果我打字http://localhost:${port}/api doc,我得到了swagger-json转储。 我可以访问索引。html,如果转到该文件并使用浏览器

    • 我正在运行一个AWS ECS服务,它正在运行一个具有多个容器的任务。任务在awsvpc网络模式下运行。(EC2,不是Fargate) 集装箱港口映射在ECS任务定义中。 PS:目标(公共IP)可以从远程PC访问。只是不是从港口来的。