Docker ASP.NET Core“ERR_EMPTY_RESPONSE”

问题描述 投票:0回答:1

我正在尝试构建我的第一个 asp.net core 和 postgres docker-compose,一切似乎都正常。此外,本地主机无法打开。当我尝试连接到 http://localhost:5000/ 时,我收到 ERR_EMPTY_RESPONSE 作为响应。

docker-compose 看起来像这样:

version: '3.8'

networks:
    stockappapi-dev:
        driver: bridge

services:
    stockappapi:
        image: stockappapi:latest
        build:
            context: .
            dockerfile: Dockerfile
        ports:
            - "5000:80"
        depends_on:
            - migrations
            - postgres_image
        networks:
            - stockappapi-dev

    postgres_image:
        image: postgres:latest
        ports:
            - "5432:5432"
        restart: always
        volumes:
            - postgres_volume:/var/lib/postgresql/data
        environment:
            POSTGRES_DB: "stockdb"
            POSTGRES_PASSWORD: "stockapp"
            POSTGRES_USER: "stockappadmin"
        networks:
            - stockappapi-dev

        depends_on:
            - migrations
    
    migrations:
        build:
            context: .
            dockerfile: Migrations.Dockerfile
        networks:
            - stockappapi-dev

volumes:
    postgres_volume:

主要的dockerfile:

FROM mcr.microsoft.com/dotnet/sdk:3.1 AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443

FROM mcr.microsoft.com/dotnet/sdk:3.1 AS build
WORKDIR /app

COPY StockApp.API.csproj .
RUN dotnet restore
COPY . .
RUN dotnet build -c Release

FROM build AS publish
RUN dotnet publish -c Release -o /publish

FROM base AS final
WORKDIR /app
COPY --from=publish /publish .
ENTRYPOINT ["dotnet", "StockApp.API.dll"]

还有 Startup.cs

    public class Startup
    {
        public Startup(IConfiguration configuration)
        {
            Configuration = configuration;
        }

        public IConfiguration Configuration { get; }

        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddControllers();

            services.AddAutoMapper(AppDomain.CurrentDomain.GetAssemblies());

            services.AddDbContext<DataContext>(p=>p.UseNpgsql(Configuration.GetConnectionString("DefaultConnection")));

            services.AddScoped<IStockAppRepo, StockAppRepo>();

        }

        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
        public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }

            app.UseRouting();

            app.UseAuthorization();

            app.UseEndpoints(endpoints =>
            {
                endpoints.MapControllers();
            });
        }
    }
}

当我启动 docker 镜像时,我得到以下信息:

stockappapi_1     | warn: Microsoft.AspNetCore.Server.Kestrel[0]
stockappapi_1     |       Unable to bind to http://localhost:5000 on the IPv6 loopback interface: 'Cannot assign requested address'.
stockappapi_1     | warn: Microsoft.AspNetCore.Server.Kestrel[0]
stockappapi_1     |       Unable to bind to https://localhost:5001 on the IPv6 loopback interface: 'Cannot assign requested address'.
stockappapi_1     | info: Microsoft.Hosting.Lifetime[0]
stockappapi_1     |       Now listening on: http://localhost:5000
stockappapi_1     | info: Microsoft.Hosting.Lifetime[0]
stockappapi_1     |       Now listening on: https://localhost:5001
stockappapi_1     | info: Microsoft.Hosting.Lifetime[0]
stockappapi_1     |       Application started. Press Ctrl+C to shut down.
stockappapi_1     | info: Microsoft.Hosting.Lifetime[0]
stockappapi_1     |       Hosting environment: Production
stockappapi_1     | info: Microsoft.Hosting.Lifetime[0]
stockappapi_1     |       Content root path: /app

如果有人能告诉我如何设置 dockerfiles 和startup.cs以建立与本地主机的连接,我将不胜感激。

编辑:我通过向 Program.cs 添加以下行解决了问题:

webBuilder.UseKestrel(options => {options.Listen(IPAddress.Any, 80);});

现在我连接到 http://localhost:5000/ ,但控制台给出以下行:现在正在监听:http://0.0.0.0:80

如何配置 ASP.NET 来监听 http://localhost:5000

asp.net docker
1个回答
0
投票

将 Kestrel 配置更改为

webBuilder.UseKestrel(options => {options.Listen(IPAddress.Any, 5000);});

这对我有用。 另外,要绝对确保将运行配置配置为将内部端口 5000 绑定到外部端口 5000。

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.