zoukankan      html  css  js  c++  java
  • 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 中的第二条规则

  • 相关阅读:
    12.Scala- 注解
    11.Scala-特质
    10.Scala-继承
    9.Scala- 包和引入
    8.Scala-对象
    7.Scala-类
    6.Scala-高阶函数
    5.Scala-匹配模式
    4.Scala-数据结构
    Ruby on Rails Tutorial 第四章 Rails背后的Ruby 之 类
  • 原文地址:https://www.cnblogs.com/zhenyuyaodidiao/p/4691232.html
Copyright © 2011-2022 走看看