• Docker 端口映射问题解决


      在操作Docker容器时发现了其一个端口映射的BUG,具体表现为:开启容器时做了端口映射80:8080,即宿主机的80端口映射到容器内部的8080Jboss端口。一开始测试也没有什么问题,都可以联通,但经过几次重启之后,突然发现无法访问到Jboss了。代码及容器内部环境没有发生过变化,只能从宿主机外部环境考虑了。

      首先,列出nat表所有链的所有规则,只显示IP地址和端口号,如下

    [root@ip-192-168-31-161 ~]# iptables -t nat -nL
    Chain PREROUTING (policy ACCEPT)
    target     prot opt source               destination         
    DOCKER     all  --  0.0.0.0/0            0.0.0.0/0            ADDRTYPE match dst-type LOCAL
    
    Chain INPUT (policy ACCEPT)
    target     prot opt source               destination         
    
    Chain OUTPUT (policy ACCEPT)
    target     prot opt source               destination         
    DOCKER     all  --  0.0.0.0/0           !127.0.0.0/8          ADDRTYPE match dst-type LOCAL
    
    Chain POSTROUTING (policy ACCEPT)
    target     prot opt source               destination         
    MASQUERADE  all  --  172.17.0.0/16        0.0.0.0/0           
    MASQUERADE  tcp  --  172.17.0.1           172.17.0.1           tcp dpt:3306
    MASQUERADE  tcp  --  172.17.0.5           172.17.0.5           tcp dpt:5666
    MASQUERADE  tcp  --  172.17.0.5           172.17.0.5           tcp dpt:8180
    MASQUERADE  tcp  --  172.17.0.5           172.17.0.5           tcp dpt:9537
    MASQUERADE  tcp  --  172.17.0.5           172.17.0.5           tcp dpt:222
    MASQUERADE  tcp  --  172.17.0.8           172.17.0.8           tcp dpt:6379
    MASQUERADE  tcp  --  172.17.0.9           172.17.0.9           tcp dpt:8080
    
    Chain DOCKER (2 references)
    target     prot opt source               destination         
    DNAT       tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:3306 to:172.17.0.1:3306
    DNAT       tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:80 to:172.17.0.2:8080
    DNAT       tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:5667 to:172.17.0.5:5666
    DNAT       tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:8180 to:172.17.0.5:8180
    DNAT       tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:9537 to:172.17.0.5:9537
    DNAT       tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:226 to:172.17.0.5:222
    DNAT       tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:6379 to:172.17.0.8:6379
    DNAT       tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:80 to:172.17.0.9:8080

      在结果在我们可以清晰的看到宿主机的80端口映射给了两个172的内部容器IP——172.17.0.2、172.17.0.9,新启动的容器IP为09,02是其重启前的IP。故做如下推测:docker在重启容器之后,重新做端口映射的时候出了问题,没有将之前的映射规则删除,导致后续容器无法进行正确的端口映射。解决办法:

    [root@ip-192-168-31-161 ~]# iptables -t nat -D DOCKER 2

    解释:删除 Chain Docker 中的第二条规则

  • 相关阅读:
    WEBAPI 增加身份验证
    C# Image与Base64编码互转函数
    WebApi 接口传参接参
    Spring.Net依赖注入(属性注入)学习笔记
    ASP.NET MVC5+EF6+EasyUI 后台管理系统(30)-本地化(多语言)
    文件各种上传,离不开的表单
    linux下yum命令出现Loaded plugins: fastestmirror
    linux系统快速安装宝塔
    微信小程序实现watch属性监听数据变化
    chrome调试微信
  • 原文地址:https://www.cnblogs.com/zhenyuyaodidiao/p/4691232.html
Copyright © 2020-2023  润新知