Loading

Docker网络配置的几种常见模式

前言

经常跟Docker打交道,对于容器net参数有了一定程度的认识,常用以下几种:

  • none
  • bridge
  • host
  • macvlan

分解

none

字面意思,用于创建无网络的容器。

docker run -it --rm --net none ubuntu:20.04 bash

bridge

默认net参数,bridge使得容器与主机之间存在一层NAT
例如主机分配的网桥地址为172.17.0.1容器则为172.17.0.3
容器可以正常访问外网但外部无法直接访问NAT背后的容器
端口转发需要使用-p参数

docker run -it --rm -p 8022:22 ubuntu:20.04 bash

host

和主机共享同一个ip因此默认转发所有端口,无网络隔离
无需使用-p转发端口但服务需要注意规避主机已有端口

docker run -it --rm --net host ubuntu:20.04 bash

macvlan

这个比较特殊,脱胎于kernel的一种模式,放在最后说。
该模式允许容器分配一个有效mac地址并向路由申请一个独立ip地址
相比ipvlan具有高性能的优点,缺陷是vlan的存在使得主机和容器的网络隔离无法互相访问(均可被第三方访问)
部分网卡默认丢弃不属于自己mac地址的数据包,一般建议打开混杂(promisc)后建立macvlan(brige模式)

In bridge mode, macvlan traffic goes through a physical device on the host.

ip link set enp0s3 promisc on
docker network create -d macvlan --subnet=192.168.1.0/24 --gateway=192.168.1.1 -o parent=enp0s3 -o macvlan_mode=bridge macnet
# assign a IP address
docker run -it --name valn_container --network macnet --ip=192.168.1.180 ubuntu:20.04 bash
# or specify mac and dns on your own
docker run -it --name valn_container --network macnet --ip=192.168.1.180 --dns=114.114.114.114 --mac-address AA:BB:CC:DD:EE:FF ubuntu:20.04 bash 

参考

Networking overview | Docker Documentation

posted @ 2022-03-20 14:24  azureology  阅读(362)  评论(0编辑  收藏  举报