Docker网桥映射到HOST OS网络接口



你好,我是docker network的新人。基本上,我想启动一个docker容器,它应该映射到现有的主机操作系统网络接口。

例如HOST OS网络接口列表

$>>ip a
1. ens192: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000 
4. ens224: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000

现在我想使用

创建一个Docker网络桥(与ens192/ens224映射)

$ docker network create -d bridge my-bridge-network

然后使用docker network

运行容器

$ docker run -itd——network= mydocker

但是通过上述步骤,我无法将network interfacesdocker networks映射。

目标

假设你希望你的Docker容器像一个普通设备一样显示在网络上,你可以"映射";使用macvlan网桥的主机接口。你将得到:

  • Docker客户端从主机所在的网络接收IP
  • 其他设备可以访问容器,就像它在它们的物理网络中一样
  • 容器可以通过给定的接口访问与其主机相同的主机

如果这不是你的意思,请留下评论并进一步解释你的场景。

怎么做

检查macvlan模块是否安装使用

lsmod | grep macvlan

如果未列出,则通过发出

来安装它
modprobe macvlan

使用Docker CLI

用你想要共享的接口创建一个网络,并指定子网和网关(如果你想通过这个网络使用internet,网关是可选的):

docker network create -d macvlan --subnet=1.2.3.4/24 --gateway=1.2.3.1 -o parent=eth0 nice_name

(父级必须从eth0更改为您的接口)

使用Docker-Compose

您还可以按需创建这些网络,并将它们包含在您的docker-compose.yml文件中,如下面的示例所示:

version: '3.3'
services:
nginx1:
restart: unless-stopped
image: nginx:latest
networks:
- nice_name
networks:
private:
nice_name:
driver: macvlan
driver_opts:
parent: eth0  # change this
ipam:
config:
- subnet: "1.2.3.0/24" # change this
gateway: "1.2.3.1" # change this (optional)
# Be aware that there is no "-" before "gateway" as it belongs to the subnet!

如果你已经在Docker-Compose之外创建了网络,你仍然可以使用external参数连接使用Docker-Compose的客户端:

version: '3.3'
services:
nginx1:
restart: unless-stopped
image: nginx:latest
networks:
- nice_name
networks:
nice_name:
external: true

最新更新