你好,我是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 interfaces
与docker 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.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