将Docker容器配置到宿主机网络环境中的几种方式:
1、通过虚拟网桥的方式
基本思路是,创建一个虚拟网桥br0,把宿主机上一网卡如eth0的ip删掉,设置到br0上,然后把eth0加入到br0上;然后先删除到eth0上的默认路由,再添加到br0上的默认路由;接着创建一个虚拟网络peer,如veth-a、veth-b,将peer的veth-a放入容器,veth-b加入到刚创建的虚拟网桥br0;最后设置容器上veth-a的ip,并设置容器默认路由:
//添加网卡 brctl addbr br0 //up网卡 ip link set br0 up //为br0设置ip地址,地址为当前机器eth0的地址,同时把eth0的地址删掉,然后把eth0连到网桥br0上;删除原来(到eth0的)默认路由规则,并添加默认路由规则到br0,via后边的ip,可以先通过ip route查看应该是什么;由于此命令会导致网络连接中断,如果是远程登录到机器上执行的,需要一步执行 ip addr add 172.16.30.131/24 dev br0; \ ip addr del 172.16.30.131/24 dev eth0; \ brctl addif br0 eth0; \ ip route del default; \ ip route add default via 172.16.30.2 dev br0 //跑个容器,不用docker提供的网络(--net=none),并获取容器id docker run -itd --name my-ubuntu --net=none ubuntu:14.04 /bin/bash cpid=$(docker inspect --format '{{.State.Pid}}' my-ubuntu) //把容器的net ns软连接到/var/run/netns下 ln -s /proc/$cpid/ns/net /var/run/netns/$cpid //添加网卡peer ip link add veth-a type veth peer name veth-b //把虚拟网卡veth-a添加到br0,并启用 brctl addif br0 veth-a ip link set veth-a up //把虚拟网卡veth-b添加到容器网络ns下 ip link set veth-b netns $cpid //修改容器中虚拟网卡veth-b的名称为eth0 ip netns exec $cpid ip link set veth-b name eth0 //启用eth0 ip netns exec $cpid ip link set eth0 up //给容器分配ip地址,此地址跟宿主机在同一ip段 ip netns exec $cpid ip addr add 172.16.30.132/24 dev eth0 //分配完地址后,设置默认路由 ip netns exec $cpid ip route add default via 172.16.30.2
2、通过虚拟网桥方式的pipework版本
原理同1,但是这里不会删除宿主机网卡eth0的ip,不会设置br0的ip,需要单独设置
//通过pipework给容器my-containe设置一个网卡eth1,网卡ip为172.16.30.139/24,修改容器配置的默认路由172.16.30.2,并把网卡peer的宿主机上的网卡加入到网桥br0(如果br0不存在则创建) pipework br0 my-container 172.16.30.139/24@172.16.30.2
3、macvlan方式
先在宿主机网络设备ens33上创建macvlan设备,然后将macvlan设备放入容器,并给容器设置ip和路由就可以在宿主机外部访问了,但是宿主机上访问不了容器;需要在宿主机网卡ens33再创建一个macvlan,然后把eth0 ip迁移到ens33上,然后设置默认路由。
//在宿主机ens33上创建macvlan设备 ip link add link ens33 dev macvlan-a mtu 1500 type macvlan mode bridge //启动docker容器,并将创建的macvlan设备放入到docker容器中,重命名macvlan-a并设置ip和路由;此时就可以在宿主机之外访问容器ip,宿主机之内访问不了 docker -itd --net=none --name my-docker ubuntu /bin/bash pid=$(docker inspect --format '{{.State.Pid}}' my-docker) ip link set macvlan-a netns $pid ip netns exec $pid set macvlan-a name eth1 ip netns exec $pid ip addr add 172.16.30.151/24 dev eth1 ip netns exec $pid ip link set eth1 up //将宿主机网卡ens33 ip移到macvlan设备上,此时宿主机就可以访问容器ip了 ip addr del 172.16.30.130/24 dev ens33;\ ip link add link ens33 dev ens33m type macvlan mode bridge;\ ip link set ens33m up;\ ip addr add 172.16.30.130/24 dev ens33m;\ route add default gw 172.16.30.2
4、pipework版vlan
//在物理机网卡eth0上创建macvlan,并添加到容器中;此时宿主机不能跟容器通信,宿主机之外可以 pipework eth0 my-container 172.16.30.139/24@172.16.30.2
5、通过dhcp给容器分配ip
//先安装udhcpc,也可以安装dhclient、dhcpcd等 docker exec -it new-docker apt-get install && apt install udhcpc //docker容器new-docker2通过dhcp获取ip,其中容器网卡是eth1,ens33为宿主机ip pid2=$(docker inspect --format '{{.State.Pid}}' new-docker2) ln -s /proc/$pid2/ns/net /var/run/netns/$pid2 pipework ens33 new-docker2 dhcp ip netns exec $pid2 ip link set eth1 up ip netns exec $pid2 udhcpc -qi eth1 -x hostname:guest
相关推荐
Docker网络配置与管理是Docker容器化技术中一个非常重要的组成部分,它关系到容器之间的通讯以及容器与外界的交互。本文将详细探讨Docker网络的基本概念、网络驱动类型以及如何选择适合的网络驱动,以及容器的网络...
Docker网络配置是容器化应用的关键组成部分,它允许容器之间以及容器与主机之间的通信。Docker默认使用docker0桥接网络,这是一个虚拟以太网桥,用于在主机和容器之间转发数据包。当创建一个新的Docker容器时,...
在Docker中,网络配置是实现容器之间以及容器与主机通信的关键部分。Docker默认创建了一个名为`docker0`的虚拟网络接口,它是一个桥接设备,用于在主机和容器之间转发数据包。`docker0`接口通常会从私有IPv4地址范围...
### CentOS7下Docker桥接网络配置详解 #### 一、背景介绍 Docker作为一种流行的容器化技术,为开发者提供了轻量级、可移植的容器环境。为了更好地管理容器之间的网络通信,理解Docker在网络配置方面的机制至关重要...
当docker启动时,它会在宿主机器上创建一个名为docker0的虚拟网络接口。它会从RFC 1918定义的私有地址中随机选择一个主机不用的地址和子网掩码,并将它分配给docker0。例如当我启动docker几分钟后它选择了172.17....
### Docker网络配置 创建自定义网络时,可以指定网络类型、子网、网关等参数。例如,创建一个新的桥接网络: ```bash docker network create --driver bridge --subnet=192.168.10.0/24 my_bridge ``` 然后,启动...
这些命令和概念对于理解并进行Docker网络配置至关重要。 完成上述步骤后,Docker将使用新的网桥bridge0进行网络通信,从而避免了与客户端设备的IP冲突。需要注意的是,每次进行网络配置变更时,都应该小心操作,...
主流 Docker 网络的实现原理概述 Docker 网络是容器化应用程序的关键组件之一,负责容器之间的通信和数据交换。为了实现容器网络,Docker 提供了多种网络模式,包括 Bridge、Host、None 和 Custom 等。今天,我们将...
如果“端口绑定注销”,可能意味着你希望避免自动映射,而是通过 Docker Compose 或网络配置来管理端口访问,以增加安全性或实现特定的网络策略。 2. **数据持久化**: Redis 支持两种持久化方式:RDB(快照)和 ...
大模型实战教程
一起学习讨论, 0分资源, 随便下
Docker网络基础 Docker数据管理与持久化 Dockerfile进阶 Docker服务与健康检查 DockerCompose入门 DockerCompose网络与服务 Docker在CI/CD中的应用 Docker安全与最佳实践 Docker与Kubernetes集成 Docker企业级部署...
【Docker网络性能测试报告】 本测试报告针对Docker网络性能进行了详尽的评估,重点关注了三种不同的网络连接方式:直接路由方式、OVS VXLAN和Rancher的IPSEC方式。测试在CentOS 7.0操作系统上进行,使用的Docker...