【问题标题】:External static IP with Docker使用 Docker 的外部静态 IP
【发布时间】:2016-04-28 02:13:36
【问题描述】:

我正在尝试在 Docker 中设置一个网桥,该网桥桥接到主机上的外部接口。

我在 CentOS 7 上运行 Docker 10.11

这个博客解释得很好……

https://forums.docker.com/t/public-accessible-ip-in-container-like-bridge-network-in-virtualbox/3668/5

这是我 docker 的命令

我根据这里的命令创建了网桥:

 sudo docker network create \
    --driver bridge \
    --subnet=192.168.33.0/24 \
    --gateway=192.168.33.10 \
    --opt "com.docker.network.bridge.name"="docker1" \
    shared_nw

然后我将它添加到外部接口

sudo brctl addif docker1 eth1

我创建了一个容器并为其分配了网络上的 IP。

我可以从主机本身毫无问题地 ping 它,但是创建 docker 网桥不会使分配给网桥的 ip 或分配给容器的 ip 可以从网络上的另一台机器访问,同样网络本身也是'不可访问。

我好像错过了什么。我认为网桥应该允许容器使用与主机相同的子网。

ip地址

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
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq master docker1 state UP qlen 1000
    link/ether 00:50:56:aa:41:10 brd ff:ff:ff:ff:ff:ff
    inet6 fe80::250:56ff:feaa:4110/64 scope link 
       valid_lft forever preferred_lft forever
3: docker1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP 
    link/ether 02:42:d9:cc:37:ff brd ff:ff:ff:ff:ff:ff
    inet 192.168.33.10/24 scope global docker1
       valid_lft forever preferred_lft forever
    inet6 fe80::42:d9ff:fecc:37ff/64 scope link 
       valid_lft forever preferred_lft forever
4: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN 
    link/ether 02:42:5c:8a:0f:57 brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.1/16 scope global docker0
       valid_lft forever preferred_lft forever

brctl 显示

bridge name bridge id       STP enabled interfaces
docker0     8000.02425c8a0f57   no      
docker1     8000.0242d9cc37ff   no      eth1

【问题讨论】:

  • 在添加eth1到网桥之前,它是否有192.168.33.0/24网络上的ip地址?您是否能够从网络上的其他主机访问该地址?此网络上是否还有其他主机(特别是使用同一范围内的 ips)?
  • 不...地址已从适配器中删除,我删除了启动时间脚本,因此它也不会配置或抓取。
  • 对。但我建议执行一个测试,将 Docker 排除在外,这样我们就可以确保这是一个 Docker 配置问题与一个基本的系统配置问题。也许你可以设置它并让我们知道结果?
  • 要回答您的问题,是的,它能够访问网络上的其他主机以及该范围内的网络上的其他主机。
  • 好的。在将eth1 添加到 docker 网桥之后,(a) docker1 网桥是否有一个有效的 IP 地址(例如,在 192.168.33.0/24 网络上的一个),并且 (b) 你 还是 能够访问该网络上的其他主机吗?另外,eth1 是您系统上连接到此特定网络的唯一接口(也就是说,您的主机是否有可能由于配置了另一个接口而成功)?

标签: networking docker subnet bridge


【解决方案1】:

好的...我想我发现我做错了。显然,在 docker 使用 docker network create 命令创建网桥后,您必须将网桥添加到任何发行版的启动脚本中,以便与管理网络的任何内容一起启动。在 Ubuntu 上,这需要将网桥添加到 /etc/network/interfaces 文件中,而对于 CentOS,这需要在 /etc/sysconfig/network-scripts 文件夹中添加一个配置文件。

重启网络服务(或重启)后一切正常。

【讨论】:

    猜你喜欢
    • 2012-05-15
    • 1970-01-01
    • 1970-01-01
    • 2021-04-21
    • 1970-01-01
    • 1970-01-01
    • 2017-11-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多