Ash*_*rki 5 networking ssh linux-networking docker
我正在尝试使我的容器可用于所有设备的网络,而不仅仅是 docker 主机。
我正在尝试使我的容器可用于所有设备的网络,而不仅仅是 docker 主机。
我想制作 docker 配置,以便可以从我的网络中的任何地方访问 docker(在我的情况下是 ssh)。
首先创建一个新的桥接设备。
brctl addbr br-em1
ip 链接设置 br-em1
将此设备添加到您的网桥
使用曾经属于 ens160 的地址配置网桥
ip 地址 del 9.158.143.52/24 dev ens160
ip 地址添加 9.158.143.52/24 dev br-em1
将默认路由移动到网桥
到目前为止一切正常。docker 主机具有网络连接。
docker run -itd --name web ubuntu
创建一个 veth 接口对:
brctl addif br-em1 web-ext
并将 web-int 接口添加到容器的命名空间:
nsenter -t $(docker-pid web) -n ip link set web-int up
nsenter -t $(docker-pid web) -n ip addr add 9.158.143.65/24 dev web-int
到目前为止,veth 是在 docker 容器内创建的,并且互联网正在容器内工作。
nsenter -t $(docker-pid web) -n ip route del 默认
nsenter -t $(docker-pid web) -n ip route 通过 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 服务。
我在设置类似内容时采用的方法是为每个容器静态分配 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
Run Code Online (Sandbox Code Playgroud)
我添加了这些辅助 IP,如下所示:
$ ip addr add 192.168.1.101/24 dev vmbr0
$ ip addr add 192.168.1.101/24 dev vmbr0
Run Code Online (Sandbox Code Playgroud)
我会像这样运行我的容器:
$ docker run --name='bind' -d \
-p 192.168.1.101:53:53/udp \
-p 192.168.1.101:10000:10000 sameersbn/bind:latest
Run Code Online (Sandbox Code Playgroud)