如何基于外部发布代码构建asp.net core docker镜像并解决端口无法访问问题
问题解决方案
- 首先确认容器启动时配置了正确的端口映射
你在Dockerfile中仅定义了容器内部程序监听8080端口,需要在执行docker run时显式配置宿主机到容器的端口映射,示例启动命令如下:
其中docker run -d -p 8080:8080 <你的镜像名称>-p参数左侧为你要使用的宿主机端口,右侧为容器内程序监听的8080端口,访问时需要使用左侧的宿主机端口访问。 - 验证容器内程序正常启动
执行docker logs <容器ID>查看容器运行日志,如果存在找不到dll文件、程序启动崩溃的报错,优先核对两个配置:- 你的项目发布生成的dll文件名是否与ENTRYPOINT中写的
test-app.dll完全一致 - 复制路径是否正确:当前Dockerfile的配置下,你的dll文件实际存放路径为
/App/App/test-app.dll,如果路径不符可以调整COPY指令的目标路径或者ENTRYPOINT中的dll路径
- 你的项目发布生成的dll文件名是否与ENTRYPOINT中写的
- 验证端口监听状态
执行docker exec <容器ID> ss -tulpn查看容器内端口监听情况,确认存在进程监听0.0.0.0:8080,如果没有监听说明程序启动异常,需排查程序本身的配置问题。 - 排查网络访问限制
- 本地运行时如果localhost访问失败,可以尝试替换为
127.0.0.1访问,部分WSL2后端的Docker环境存在localhost解析异常的问题 - 如果是在云服务器上部署,需要检查云服务器安全组、系统防火墙是否放开了宿主机映射的对应端口
- 可以执行
docker inspect <容器ID> | grep IPAddress获取容器的内部IP,直接访问http://<容器内部IP>:8080验证程序本身是否可以正常响应,如果可以正常访问则问题出在端口映射或宿主机网络配置上。
- 本地运行时如果localhost访问失败,可以尝试替换为
内容的提问来源于stack exchange,提问作者mit
相关产品推荐
相关产品推荐

