当前位置: 首页 > 知识库问答 >
问题:

CentOS上的Docker,具有网桥到LAN网络

林德惠
2023-03-14

我有一个10.101的服务器VLAN。10.0/24,我的Docker主机是10.101。10.31. 如何在Docker主机(VM)上配置网桥网络,以便所有容器都可以直接连接到LAN网络,而无需在默认的172.17上重定向端口。0.0/16? 我尝试过搜索,但到目前为止我找到的所有howto都导致SSH会话丢失,我不得不从控制台进入VM以恢复我执行的步骤。

共有1个答案

锺离德庸
2023-03-14

有多种方法可以做到这一点。我最成功的两个是将子网路由到docker网桥和在主机LAN上使用自定义网桥。

这样做的好处是只需要本地docker工具来配置docker。它的缺点是需要向您的网络添加一条路由,这不在dockers汇款范围内,通常是手动的(或者依赖于“网络人”)。

>

/etc/sysctl.conf: net.ipv4.ip_forward = 1
sysctl -p /etc/sysctl.conf

在虚拟机网络上创建一个具有新子网的docker网桥,例如10.101。11.0/24

docker network create routed0 --subnet 10.101.11.0/24

告诉网络的其他部分10.101.11.0/24应该通过10.101.10路由。X其中X是docker主机的IP。这是外部路由器/html" target="_blank">网关/"网络家伙"配置。在linux网关上,您可以通过以下方式添加路由:

ip route add 10.101.11.0/24 via 10.101.10.31

在桥上创建具有10.101.11.0/24地址的容器。

docker run --net routed0 busybox ping 10.101.10.31
docker run --net routed0 busybox ping 8.8.8.8

那你完了。容器具有可路由的IP地址。如果您对网络端没问题,或者在网络上运行RIP/OSPF或负责路由的Calico,那么这是最干净的解决方案。

这样做的好处是不需要任何外部网络设置。缺点是docker主机上的设置更加复杂。主接口在启动时需要此桥,因此它不是本机docker网络设置。需要管道或手动容器设置。

使用虚拟机会使这变得更复杂,因为您在主虚拟机的接口上运行带有额外MAC地址的额外接口,而主虚拟机的接口首先需要额外的“混杂”配置才能使其工作。

桥接接口的永久网络配置因发行版而异。以下命令概述了如何设置接口,并将在重新启动后消失。在更改主网络接口配置时,需要控制台访问或进入VM的单独路由。

>

  • 在主机上创建网桥。

    ip link add name shared0 type bridge
    ip link set shared0 up
    

    /etc/sysconfig/networkscripts/ifcfg-br0

    DEVICE=shared0
    TYPE=Bridge
    BOOTPROTO=static
    DNS1=8.8.8.8
    GATEWAY=10.101.10.1
    IPADDR=10.101.10.31
    NETMASK=255.255.255.0
    ONBOOT=yes
    

    将主接口连接到网桥,通常eth0

    ip link set eth0 up
    ip link set eth0 master shared0
    

    /etc/sysconfig/网络脚本/ifcfg-eth0

    DEVICE=eth0
    ONBOOT=yes
    TYPE=Ethernet
    IPV6INIT=no
    USERCTL=no
    BRIDGE=shared0
    

    重新配置网桥,使其具有eth0的ip配置。

    ip addr add dev shared0 10.101.10.31/24
    ip route add default via 10.101.10.1
    

    使用10.101将容器连接到桥架上。10.0/24地址。

    CONTAINERID=$(docker run -d --net=none busybox sleep 600)
    pipework shared1 $CONTAINERID 10.101.10.43/24@10.101.10.Y
    

    或者在容器内使用DHCP客户端

    pipework shared1 $CONTAINERID dhclient
    

    Docker后来添加了一个名为macvlan的网络驱动程序,它可以使容器看起来直接连接到主机所在的物理网络。容器连接到主机上的父接口。

    docker network create -d macvlan \
      --subnet=10.101.10.0/24 \
      --gateway=10.101.10.1  \
      -o parent=eth0 pub_net
    

    这将面临同样的VM/软交换问题,其中网络和接口需要在mac地址方面混乱。

  •  类似资料:
    • 有没有办法解决这个问题? 操作系统:Debian 8 Docker版本:1.9.0,构建76d6bc9 ifconfig输出:

    • 本文向大家介绍Docker网络上的用户定义网桥,包括了Docker网络上的用户定义网桥的使用技巧和注意事项,需要的朋友参考一下 在本文中,我们将讨论为什么应该在默认桥网络上使用用户定义的桥网络。我们还将使用实际示例进行演示。 如果您使用用户定义的网桥进行容器网络连接,则该网络中的所有容器会自动将所有必需的端口公开给彼此,而不是公开给外部世界。这增加了容器之间的互操作性,并提供了更好的隔离性。 使用

    • 本文向大家介绍Docker主机网络与网桥网络,包括了Docker主机网络与网桥网络的使用技巧和注意事项,需要的朋友参考一下 可用于Docker网络的单主机网络有两种类型:“主机”和“桥”网络。单主机网络意味着它们的影响对于每个单独的主机都是局部的。 在主机网络的情况下,特定的Docker容器可以直接使用主机的网络来发送和接收数据包。对于网桥网络,它需要端口映射才能进行通信。 为了更好地理解它们,让

    • 问题内容: 任何想法如何解决? 操作系统 :Debian 8 Docker版本 :1.9.0,内部版本76d6bc9 ifconfig输出 : 问题答案: 升级后,我遇到了类似的问题。 跑 重置您的网络。然后重新启动docker(或取决于您的操作系统)。 如果一切正常,则可以删除目录。

    • null sbin/start-slave.sh spark://c96___37fb:7077--用于并置从机的端口7078 sbin/start-slave.sh spark://masternodeip:7077--其他两个从机的端口7078 前面引用的所有端口都从nodeMaster重定向到相应的Docker。 因此,webUI向我显示,我的集群有3个连接的节点,不幸的是,当运行时,只有并

    • 我正在通过docker-compose运行MySQL,并试图从主机而不是其他容器连接到它。环境被锁定,我不能创建新的docker网络或绑定一个容器到‘主机’网络,桥是唯一的选择。我可以使用容器的IP地址连接到MySQL实例,但这没有多大用处--我需要使用或。这可能吗?如果是,怎么做? Docker-compose.yml 我可以使用容器的IP进行连接,如下所示: 但无法使用进行连接,如下所示: 其