我正在尝试做什么

我正在尝试做什么

我正在尝试做什么

我正在尝试使我的容器可以联网到所有设备而不仅仅是docker主机。

信息

  • 我的网络子网是 9.158.143.0/24
  • 我的网关是 9.1158.143.254
  • 我的docker主机IP是9.158.143.52主接口(ens160)
  • 我的容器 IP 是 9.158.143.65
  • docker-pid 是 docker 进程 id
  • docker id 是 docker ip

我正在尝试做什么

我正在尝试使我的容器可以联网到所有设备而不仅仅是docker主机。

我想使docker配置能够从我的网络中的任何位置访问docker(在我的情况下是ssh)。

迄今采取的步骤

  1. 首先创建一个新的桥接设备。

    • brctl addbr br-em1

    • IP 链路设置 br-em1

  2. 将此设备添加到你的桥接器

    • brctl addif br-em1 ens160
  3. 使用以前属于 ens160 的地址配置网桥

    • ip 地址 del 9.158.143.52/24 dev ens160

    • ip 地址添加 9.158.143.52/24 dev br-em1

  4. 将默认路由移至网桥

    • ip 路由删除默认
    • ip route 添加默认通过 9.158.143.254 dev br-em1

到目前为止,一切正常。docker 主机具有网络连接。

  1. docker run-itd——名称web ubuntu

  2. 创建veth接口对:

    • ip link add web-int 类型 veth 对等名称 web-ext
  3. brctl addif br-em1 web-ext

  4. 并将web-int接口添加到容器的命名空间中:

    • ip 链接设置 netns $(docker-pid web) dev web-int
  5. nsenter -t $(docker-pid web) -n ip link 设置 web-int

  6. nsenter -t $(docker-pid web) -n ip addr 添加 9.158.143.65/24 dev web-int

到目前为止,veth 已在 docker 容器内创建,并且互联网正在容器内运行。

  1. nsenter -t $(docker-pid web) -n ip 路由 del 默认

  2. nsenter -t $(docker-pid web) -n ip route add default via 9.158.143.254 dev web-int

问题

这些是遵循的步骤。在最后 2 个步骤之后,容器内的互联网停止工作。我无法从网络中的任何其他机器 ping docker 主机(之前可以正常工作)。

除了这些步骤之外,是否还需要添加任何 iptables 规则?如果需要,请帮忙。

PS:我的docker0的ip是172.17.0.1使用的链接:http://blog.oddbit.com/2014/08/11/four-ways-to-connect-a-docker/ (带有 Linux 桥接设备)

使用的 Ubuntu 镜像已启动并运行 ssh 服务。

答案1

我在设置类似内容时采用的方法是静态地为每个容器分配 IP 地址。然后,我将 IP 地址作为辅助 IP “堆叠” 在网桥接口上vmbr0

我的网络设置:

$ ip a l
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:22:15:91:XX:XX brd ff:ff:ff:ff:ff:ff
    inet6 fe80::222:15ff:fe91:XXXX/64 scope link
       valid_lft forever preferred_lft forever
3: vmbr0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN
    link/ether 00:22:15:91:XX:XX brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.10/24 brd 192.168.1.255 scope global vmbr0
    inet 192.168.1.101/24 scope global secondary vmbr0
    inet 192.168.1.103/24 scope global secondary vmbr0
    inet6 fe80::222:15ff:fe91:c12d/64 scope link
       valid_lft forever preferred_lft forever
4: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN
    link/ether 00:00:00:00:00:00 brd ff:ff:ff:ff:ff:ff
    inet 172.17.42.1/16 scope global docker0

我添加了这些辅助 IP,如下所示:

$ ip addr add 192.168.1.101/24 dev vmbr0
$ ip addr add 192.168.1.101/24 dev vmbr0

我会像这样运行我的容器:

$ docker run --name='bind' -d \
    -p 192.168.1.101:53:53/udp \
    -p 192.168.1.101:10000:10000 sameersbn/bind:latest

相关内容