zoukankan      html  css  js  c++  java
  • 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
    来源:简书
    简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。
  • 相关阅读:
    git(1)-git关联GitHub-windows-转载
    jenkins(4)-jenkins配置邮件通知
    jenkins(3)-linux下安装jenkins(yum install方式)
    【PAT甲级】1090 Highest Price in Supply Chain (25 分)(DFS)
    【PAT甲级】1087 All Roads Lead to Rome (30 分)(MAP【int,string】,邻接表,DFS,模拟,SPFA)
    【PAT甲级】1018 Public Bike Management (30 分)(DFS,SPFA)
    Educational Codeforces Round 61 (Rated for Div. 2) G(线段树,单调栈)
    Atcoder Grand Contest 032C(欧拉回路,DFS判环)
    Educational Codeforces Round 62 (Rated for Div. 2)E(染色DP,构造,思维,组合数学)
    Atcoder Grand Contest 031C(构造,思维,异或,DFS)
  • 原文地址:https://www.cnblogs.com/yipianchuyun/p/10434296.html
Copyright © 2011-2022 走看看