想来,对docker的学习和实践,已经一年有余了,而我关于这样的文章,只有为数不多的几篇。今天借使用docker中发生的一种异常情况为例,写此篇幅。
这个是在centos7.0 、.netcore2.1的环境基础上进行的。这里没有使用dockerfile配置文件的形式,而是直接采用docker命令的形式。
镜像采用的是docker.io/microsoft/dotnet 。
然后运行镜像
1 | docker run -d --privileged= true - v /app : /app -p 5000:5000 bde01d9ed6eb dotnet /app/WebApplication1 .dll |
这样,运行其镜像,理论上是可以的,但是curl访问的时候,就出现了标题所示的问题。
首先通过docker exec命令,在运行的容器中,执行curl请求,访问http://localhost:5000端口,返回结果正常,在当前主机上访问,就会出现connection reset by peer的问题,查看主机正在监听的端口
[root@localhost ~]# netstat -ant|grep 5000
tcp 0 0 127.0.0.1:5000 0.0.0.0:* LISTEN tcp6 0 0 ::1:5000 :::* LISTEN
可以看到,正在监听,telnet拨号也是连通的状态,
docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES c9a97ffc6cc2 bde01d9ed6eb "dotnet /app/WebAp..." 3 hours ago Up 3 hours xenodochial_jang
容器正在运行,为此,又在docker run执行容器的时候,加上 expose参数,暴露端口,expose=5000,指定了容器暴露的端口,这下应该没问题了吧,可结果依然如题!
想必是网络问题,诸如防火墙、端口映射之类的问题,也想过修改防火墙设置,由于嫌操作麻烦,就未做尝试。
百度,必应一下:结果令人失望,又是镜像问题,又是防火墙问题,都无法解决该问题。
思前想后,不要把问题复杂化了,切换网络吧,docker run的--net命令
docker run -d --net="host" --privileged=true -v /app:/app -p 5000:5000 bde01d9ed6eb dotnet /app/WebApplication1.dll
这样容器启动后,访问测试:
1 | curl http: //localhost :5000 |
当然,这个过程中,还出现了类似权限之类的问题,导致应用无法启动,在此篇中,不再赘述。
具体问题还是具体分析,同一个错误,可能触发问题的原因不尽相同,这就需要我们辩证的去思考,根据自身应用的情况,进行尝试。经过这一段时间的学习,多余docker的理论和实践等方面,有了不少的心得,对应docker的大部分命令都可以烂熟于心的,灵活的应用,在以后的工作中,会在团队内部,推动容器技术的应用。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· 展开说说关于C#中ORM框架的用法!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?