• docker 网络


    docker network create --driver bridge --subnet 10.10.1.0/24 --gateway 10.10.1.255 my_net1

    运行docker容器是指定网络

    docker run -it --network=my_net1 --ip 10.10.1.2 busybox

    确实,如果 host 上对每个网络的都有一条路由,同时操作系统上打开了 ip forwarding,host 就成了一个路由器,挂接在不同网桥上的网络就能够相互通信。下面我们来看看 docker host 满不满足这些条件呢?

    ip r 查看 host 上的路由表:

    # ip r

    ......

    172.17.0.0/16 dev docker0  proto kernel  scope link  src 172.17.0.1

    172.22.16.0/24 dev br-5d863e9f78b6  proto kernel  scope link  src 172.22.16.1

    ......

    172.17.0.0/16 和 172.22.16.0/24 两个网络的路由都定义好了。再看看 ip forwarding:

    # sysctl net.ipv4.ip_forward

    net.ipv4.ip_forward = 1

    ip forwarding 也已经启用了。

        条件都满足,为什么不能通行呢?

        我们还得看看 iptables:

    # iptables-save

    ......

    -A DOCKER-ISOLATION -i br-5d863e9f78b6 -o docker0 -j DROP

    -A DOCKER-ISOLATION -i docker0 -o br-5d863e9f78b6 -j DROP

    ......

    原因就在这里了:iptables DROP 掉了网桥 docker0 与 br-5d863e9f78b6 之间双向的流量

        从规则的命名 DOCKER-ISOLATION 可知 docker 在设计上就是要隔离不同的 netwrok。

        那么接下来的问题是:怎样才能让 busybox 与 httpd 通信呢?

        答案是:为 httpd 容器添加一块 net_my2 的网卡。这个可以通过docker network connect 命令实现。

        我们在 httpd 容器中查看一下网络配置:

        容器中增加了一个网卡 eth1,分配了 my_net2 的 IP 172.22.16.3。现在 busybox 应该能够访问 httpd 了,验证一下:

    busybox 能够 ping 到 httpd,并且可以访问 httpd 的 web 服务。当前网络结构如图所示:

    下一节我们讨论容器间通信的三种方式

    容器之间可通过 IP,Docker DNS Server 或 joined 容器三种方式通信

     

    IP 通信

     

    从上一节的例子可以得出这样一个结论:两个容器要能通信,必须要有属于同一个网络的网卡。

     

    满足这个条件后,容器就可以通过 IP 交互了。具体做法是在容器创建时通过 --network 指定相应的网络,或者通过 docker network connect 将现有容器加入到指定网络。可参考上一节 httpd 和 busybox 的例子,这里不再赘述。

     

    https://www.cnblogs.com/hanxiaohui/p/8550506.html

    https://www.cnblogs.com/CloudMan6/p/7077198.html

     

     

     

    我们在此网络中启动的容器必须位于同一个Docker主机上。网络中的每个容器都可以立即与网络中的其他容器通信。但是,网络本身是将容器与外部网络隔离开来的。

    如下图:

    自定义网络-桥接

    在用户定义的网桥中,不支持链接。
    但是, 可以在此网络中的容器上公开和发布容器端口。

    如果要使bridge网络的一部分可用于外部网络,这将是非常有用的方案。具体后面最后点部分会提到。

    让外部主机或容器访问自定义网络中的部分容器提供的服务

    可以看出,如果要在单个主机上运行相对较小的网络,桥接网络是非常合适的。但是,您可以通过创建 network 来创建更大的 overlay 网络。后面会专门文章讨论。



    作者:xiguatian
    链接:https://www.jianshu.com/p/a2fa1ca0ec4c
    来源:简书
    简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。
  • 相关阅读:
    [转]sql getdate() 时间格式设置
    [Prism练习] Prism下MVVM中命令绑定的CanExecute问题
    [Prism练习] Prism Modularity 配合 Unity Ioc 用 XML 方式
    Java课程设计
    WinForm指定ListView某项的字体和前景色。
    [Python学习第一天]内置数据类型介绍,万物皆对象!
    设置Swing使用系统风格的组件
    Tomcat Valve:AccessLogValve
    【转】HttpClient关闭连接
    学习Tomcat的相关资料
  • 原文地址:https://www.cnblogs.com/yipianchuyun/p/10434296.html
Copyright © 2020-2023  润新知