我正在尝试构建我的第一个 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