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

ASP。在本地主机上浏览时,docker上的NET Core返回ERR_EMPTY_RESPONSE

凤昊东
2023-03-14

当我尝试通过http://localhost:5004在docker上运行我的ASP.NETCore应用程序时,我的浏览器会收到以下响应:ERR_CONNECTION_REFUSED

这是我的档案

# https://hub.docker.com/_/microsoft-dotnet
FROM mcr.microsoft.com/dotnet/sdk:5.0.404 AS build


WORKDIR /code

COPY . .

# copy everything else and build app

RUN dotnet publish -c release -o /app 

# final stage/image
FROM mcr.microsoft.com/dotnet/aspnet:5.0.13

WORKDIR /app
COPY --from=build /app ./

ENTRYPOINT ["dotnet", "ProductCatalogApi.dll", "--server.urls", "http://+:5004"]

我的docker-compose.yml文件(不要介意密码格式):

version: "5.0.4"

networks:
   frontend:
   backend:

services:
   catalog:
      build:
         context: .\src\Services\ProductCatalogApi
         dockerfile: Dockerfile
      image: shoes/catalog
      environment:
         - DatabaseServer=mssqlserver
         - DatabaseName=CatalogDb
         - DatabaseUser=sa
         - DatabasePassword=(passwordhere)
         - ASPNETCORE_URLS=http://+:5004
         - ASPNETCORE_ENVIRONMENT=Production
      container_name: catalogapi
      ports:
         - "5004:80"
      networks:
         - backend
         - frontend
      depends_on:
         - mssqlserver
         
   mssqlserver:
      image: "mcr.microsoft.com/mssql/server:2019-latest"
      ports:
         - "1445:1433"

      container_name: mssqlcontainer
      environment:
         - ACCEPT_EULA=Y
         - SA_PASSWORD=(passwordhere)
         - MSSQL_PID=Developer
      networks:
         - backend

  

在程序中创建主机构建器.cs:

        private static IHostBuilder CreateHostBuilder(string[] args) =>
            Host.CreateDefaultBuilder(args)
                .ConfigureWebHostDefaults(webBuilder =>
                {
                    webBuilder.UseStartup<Startup>();
                    // webBuilder.UseKestrel(options => { options.Listen(IPAddress.Any, 5000); });
                    webBuilder.UseKestrel().UseUrls(Environment.GetEnvironmentVariable("ASPNETCORE_URLS"));
                });
    }
}

我无法找出我的配置中缺少或错误的地方,无法通过本地主机5004(或任何端口,例如5000)访问本地机器上的应用程序

注意:我按以下顺序运行这些命令

    < Li > docker-撰写版本 < Li > docker-编写mssqlserver < Li > docker-撰写目录

共有1个答案

宰父桐
2023-03-14

当您设置ASPNETCORE_URLS=超文本传输协议://: 5004时,您的应用程序将监听端口5004。所以这是您应该映射到主机端口的端口。您已经映射了端口80。

html" target="_blank">docker-compose文件更改为

  ports:
     - "5004:5004"

现在您应该可以访问它了。请记住,默认情况下,Swagger在生产环境中不可用,因此您将无法使用Swagger页面。

你已尝试以多种不同的方式配置应用侦听的端口。一个好主意可能是将其全部删除,并仅在启动设置.json文件中对其进行配置。然后,当您在开发期间本地运行它时,它将侦听 launchSettings.json 中指定的端口,并且在容器中运行时,它将侦听端口 80。

它在容器中运行时会监听端口80的原因是Microsoft在aspnet映像中将ASPNETCORE_URLS环境变量设置为超文本传输协议://: 80

 类似资料:
  • 我有一个RMI服务器在本地主机上运行,导出类型的对象: 然后我想启动一个客户端并获取该对象的存根。似乎找到了注册表,但随后在块中抛出了: java.rmi.NotBoundexception:M在sun.rmi.registry.registryimpl.lookup(registryimpl.java:136)在sun.rmi.server.unicastserverref.olddispatc

  • 问题内容: 感谢您收看这个问题。 所以我的问题与如何在docker-compose up指令上运行脚本的最佳实践有关。 目前,我正在主机和容器之间共享一个卷,以使脚本更改对主机和容器均可见。与监视脚本轮询配置文件中的更改类似。 该脚本必须根据预定义规则对主机进行更改。 所以我的问题是: 我如何才能在docker-compose up指令上甚至从服务的dockerfile上启动此脚本,以便每当容器启

  • 问题内容: 我是否可以附加功能作为按钮的单击事件,以使浏览器返回上一页? 问题答案: 在您的输入元素中添加

  • 问题内容: 我已经能够成功使用以下卷在Docker容器之间共享文件夹 但是我的问题是,这与在Dockerfile中使用命令之间有什么区别 我正在使用带有命令的图像,并且想知道如何与主机共享它。我已经使用上面的命令完成了此操作,但我不知道是否同时需要和和。 问题答案: 该命令将在您的容器中安装一个目录,并将在该目录中创建或编辑的所有文件存储 在容器文件结构外部的 主机磁盘上,绕过联合文件系统。 这个

  • 问题内容: 我在apache后面使用cxf和jetty通过soap公开Web服务。目标是在所有情况下都在http:// localhost:9000 上启动码头并为其提供apache代理,但是让自动生成的wsdl显示适合其运行环境的soap:address(例如,http://api.testing .example.com的 ,http://api.uat.example.com,https:/