Docker部署ASP.NET Core 6 API映射8080端口后Postman及浏览器无法访问
你日志里的两个DataProtection相关警告不影响接口访问,仅和加密数据持久化相关,不用优先处理。连接拒绝属于TCP网络层面问题,可按以下顺序排查:
第一步:确认容器正常运行
执行命令docker ps,查看对应容器的状态是否为Up,如果状态是退出,执行docker logs 容器ID查看崩溃日志定位问题。第二步:确认端口映射生效
执行命令docker port 容器名/容器ID,正常输出应为:
80/tcp -> 0.0.0.0:8080 80/tcp -> [::]:8080
如果没有对应输出,说明本地8080端口已被其他程序占用,可更换映射端口重新启动容器,例如:docker run -p 9999:80 --name container-backend image-backend
第三步:解决WSL2后端转发异常问题
如果你在Windows上使用Docker Desktop的WSL2后端,存在已知的localhost转发失效问题:- 尝试将请求地址中的
localhost替换为127.0.0.1访问 - 执行
wsl hostname -I获取WSL虚拟机IP,直接访问http://<WSL IP>:8080/api/v1/Authentication/test验证连通性
- 尝试将请求地址中的
第四步:排除防火墙拦截
暂时关闭本地Windows防火墙后重试访问,部分防火墙规则会拦截Docker的端口转发流量。第五步:验证容器内服务可用性
执行命令进入容器内部:docker exec -it container-backend bash
在容器内执行请求测试服务是否正常:curl http://localhost:80/api/v1/Authentication/test
如果能正常返回{"Test":"it works test"},说明服务本身无问题,问题出在宿主机到容器的网络链路,按前三个步骤排查即可。
另外需要注意:如果之前启动过同名容器未清理,也会导致新容器端口映射失败,可执行docker rm -f container-backend清理旧容器后再重新启动。
内容的提问来源于stack exchange,提问作者harili

