.NET 6 Web API Docker端口转发后无法访问问题求助
问题排查及解决方案
以下是你操作中的几处错误点:
- 端口映射与访问端口不匹配
你执行的docker run命令中-p 8000:443参数的含义是:将宿主机的8000端口映射到容器内部的443端口。你访问的localhost:433首先存在端口号笔误(443误写为433),其次应该访问宿主机的映射端口8000,而非容器内部端口443。 - 协议与端口不匹配
443是HTTPS协议默认端口,你使用http://协议访问HTTPS端口会直接被拒绝,需要改为https://前缀,或者直接映射容器的HTTP 80端口使用HTTP访问。 - Swagger默认在生产环境关闭
.NET 6 Web API默认配置下,Swagger仅在Development开发环境下启用,Docker容器运行时默认环境为Production生产环境,即使接口能正常访问,Swagger页面也会返回404。 - 容器HTTPS端口未配置证书无法监听
默认微软ASP.NET 6镜像的443端口需要额外配置HTTPS证书才能正常监听,未配置证书的情况下容器内服务不会监听443端口,映射后也无法访问。
正确操作步骤
- 调整运行命令,映射HTTP 80端口,同时指定环境为开发环境打开Swagger:
docker container run -d --name mynewapi -p 8000:80 -e ASPNETCORE_ENVIRONMENT=Development myusername/myreponame:mycontainername
- 访问地址改为:
http://localhost:8000/swagger/index.html即可正常打开Swagger页面。
如果需要使用HTTPS访问,额外将本地的ASP.NET Core开发者证书挂载到容器内,同时配置对应的密码参数即可。
内容的提问来源于stack exchange,提问作者JsonStatham
相关产品推荐
相关产品推荐

