• Docker: connection reset by peer


    想来,对docker的学习和实践,已经一年有余了,而我关于这样的文章,只有为数不多的几篇。今天借使用docker中发生的一种异常情况为例,写此篇幅。

    这个是在centos7.0 、.netcore2.1的环境基础上进行的。这里没有使用dockerfile配置文件的形式,而是直接采用docker命令的形式。

    镜像采用的是docker.io/microsoft/dotnet 。

    然后运行镜像

    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

    这样容器启动后,访问测试:

    curl http://localhost:5000
    

      

    当然,这个过程中,还出现了类似权限之类的问题,导致应用无法启动,在此篇中,不再赘述。

    具体问题还是具体分析,同一个错误,可能触发问题的原因不尽相同,这就需要我们辩证的去思考,根据自身应用的情况,进行尝试。经过这一段时间的学习,多余docker的理论和实践等方面,有了不少的心得,对应docker的大部分命令都可以烂熟于心的,灵活的应用,在以后的工作中,会在团队内部,推动容器技术的应用。

  • 相关阅读:
    java线程学习之volatile关键字
    java线程学习之yield方法
    java线程学习之join方法
    小程序hideTarBar隐藏TabBar后,获取windowHeight不准确问题
    canvas等base64格式上传到服务端直传到oss
    服务器关于node的注意事项
    node.js连接本地数据库
    小程序(mpvue框架)的总结
    git代码的注意
    js里的实用小技巧
  • 原文地址:https://www.cnblogs.com/ibeisha/p/docker912.html
Copyright © 2020-2023  润新知