• Docker实例:创建一个点到点连接


    默认情况下,Docker 会将所有容器连接到由 docker0 提供的虚拟子网中。

    用户有时候需要两个容器之间可以直连通信,而不用通过主机网桥进行桥接。

    解决办法很简单:创建一对 peer 接口,分别放到两个容器中,配置成点到点链路类型即可。

    首先启动 2 个容器:

    $ sudo docker run -i -t --rm --net=none base /bin/bash
    root@1f1f4c1f931a:/#
    $ sudo docker run -i -t --rm --net=none base /bin/bash
    root@12e343489d2f:/#

    找到进程号,然后创建网络名字空间的跟踪文件。

    $ sudo docker inspect -f '{{.State.Pid}}' 1f1f4c1f931a
    2989
    $ sudo docker inspect -f '{{.State.Pid}}' 12e343489d2f
    3004
    $ sudo mkdir -p /var/run/netns
    $ sudo ln -s /proc/2989/ns/net /var/run/netns/2989
    $ sudo ln -s /proc/3004/ns/net /var/run/netns/3004

    创建一对 peer 接口,然后配置路由

    $ sudo ip link add A type veth peer name B
    
    $ sudo ip link set A netns 2989
    $ sudo ip netns exec 2989 ip addr add 10.1.1.1/32 dev A
    $ sudo ip netns exec 2989 ip link set A up
    $ sudo ip netns exec 2989 ip route add 10.1.1.2/32 dev A
    
    $ sudo ip link set B netns 3004
    $ sudo ip netns exec 3004 ip addr add 10.1.1.2/32 dev B
    $ sudo ip netns exec 3004 ip link set B up
    $ sudo ip netns exec 3004 ip route add 10.1.1.1/32 dev B

    现在这 2 个容器就可以相互 ping 通,并成功建立连接。点到点链路不需要子网和子网掩码。

    此外,也可以不指定 --net=none 来创建点到点链路。这样容器还可以通过原先的网络来通信。

    利用类似的办法,可以创建一个只跟主机通信的容器。但是一般情况下,更推荐使用 --icc=false 来关闭容器之间的通信。

  • 相关阅读:
    有一天,我们能这样相爱吗?
    端午节来源六说
    一个ini类代替缓存使用
    创意生活可爱香皂
    漂亮的韩国发饰
    Oracle中PL/SQL单行函数和组函数详解
    真正爱你的女人是这样的
    执子之手,与子偕老。你同意么?
    男人如茶
    Oracle SQL 內置函數大全
  • 原文地址:https://www.cnblogs.com/navysummer/p/8455123.html
Copyright © 2020-2023  润新知