veth pair
)。docker run
的时候通过 --net
参数来指定容器的网络配置,有4个可选值:--net=bridge
这个是默认值,连接到默认的网桥。--net=host
告诉 Docker 不要将容器网络放到隔离的命名空间中,即不要容器化容器内的网络。此时容器使用本地主机的网络,它拥有完全的本地主机接口访问权限。容器进程可以跟主机其它 root 进程一样可以打开低范围的端口,可以访问本地网络服务比如 D-bus,还可以让容器做一些影响整个主机系统的事情,比如重启主机。因此使用这个选项的时候要非常小心。如果进一步的使用 --privileged=true
,容器会被允许直接配置主机的网络堆栈。--net=container:NAME_or_ID
让 Docker 将新建容器的进程放到一个已存在容器的网络栈中,新容器进程有自己的文件系统、进程列表和资源限制,但会和已存在的容器共享 IP 地址和端口等网络资源,两者进程可以直接通过 lo
环回接口通信。--net=none
让 Docker 将新容器放到隔离的网络栈中,但是不进行网络配置。之后,用户可以自己进行配置。--net=none
后,可以自行配置网络,让容器达到跟平常一样具有访问网络的权限。通过这个过程,可以了解 Docker 配置网络的细节。/bin/bash
容器,指定 --net=none
参数。docker0
,并启用它docker0
卸载。ip netns exec
命令来在指定网络命名空间中进行配置,从而配置容器内的网络。