我在.net核心中拥有最简单的Web Api应用程序(使用创建时获得的默认api / values api)
我已启用HTTPS,因此在调试中它可以工作,并且红k报告:
Hosting environment: Development
Now listening on: https://localhost:5001
Now listening on: http://localhost:5000
当我在docker中运行该应用程序(使用MS提供的dockerfile)时,红reports报告它仅在端口80上监听
Hosting environment: Production
Now listening on: http://[::]:80
如何将应用程序配置为也可以在docker上侦听https?
答案 0 :(得分:3)
确保您的应用程序Dockerfile中有EXPOSE 5001
之后,
使用此命令启动您的应用程序:
sudo docker run -it -p 5000:5000 -p 5001:5001
-e ASPNETCORE_URLS="https://+443;http://+80"
-e ASPNETCORE_HTTPS_PORT=5001
-e ASPNETCORE_Kestrel__Certificates__Default__Password="{YOUR_CERTS_PASSWORD}"
-e ASPNETCORE_Kestrel__Certificates__Default__Path=/https/{YOUR_CERT}.pfx
-v ${HOME}/.aspnet/https:/https/
--restart=always
-d {YOUR_DOCKER_ID}/{YOUR_IMAGE_NAME}
更新:
只需使用自签名证书进行调试,这是Kestrel的示例:
WebHost.CreateDefaultBuilder(args)
.UseKestrel(options =>
{
options.Listen(IPAddress.Loopback, 5000); // http:localhost:5000
options.Listen(IPAddress.Any, 80); // http:*:80
options.Listen(IPAddress.Loopback, 443, listenOptions =>
{
listenOptions.UseHttps("certificate.pfx", "password");
});
})
.UseStartup<Startup>()
.Build();