docker网络
docker网络驱动主要有以下几种
-
bridge:默认的网络驱动程序。当您的应用程序在需要通信的独立容器中运行时,通常会使用网桥网络。
-
host:直接使用主机的网络。host 仅可用于Docker 17.06及更高版本上的集群服务。
-
overlay:覆盖网络将多个Docker守护程序连接在一起,并使群集服务能够相互通信。您还可以使用覆盖网络来促进群集服务和独立容器之间或不同Docker守护程序上的两个独立容器之间的通信。这种策略消除了在这些容器之间进行操作系统级路由的需要。请参阅叠加网络。
-
macvlan:Macvlan网络允许您将MAC地址分配给容器,使其在网络上显示为物理设备。Docker守护程序通过其MAC地址将流量路由到容器。
一般来说我们要新建个容器可以通过端口转发来做,例如:
docker run -dit -p 2345:22 ubuntu:latest
通过-p
指定一个主机端口转发到容器的22端口,也可以通过-P
指定一个随机端口。这时该容器的ip是在该主机下的ip,并不和原局域网在一个网段。通过ifconfig
查看发现ip是172.17.0.2
。
这里主机和容器是相互可以ping通的,主机相当于有两个ip。但是同网段其他的主机是无法ping通该容器的。你想要同网段其他的主机也能ping通容器,可以参考这里 Docker容器通过独立IP暴露给局域网的方法
配置静态ip
还有一种需求,是想要建立的容器具有和主机在同一个原局域网的ip,这个有多种解决方式,但不并一定都适合。
第一种是通过配置一个网桥,然后通过pipework给容器指定一个ip
给docker容器分配静态ip地址
Ubuntu下Docker固定IP配置及桥接
第二种通过上述的macvlan
来建立一个新的network
docker network create -d macvlan --subnet=172.x.x.x/24 --gateway=172.x.x.x -o parent=eno3 mcv
docker run -dit --net=mcv --ip=172.x.x.x --name=test3 ubuntu:latest /bin/bash
不足之处是你在当前容器中不能ping或者连通当前容器所在主机的IP地址,这是因为通信由于安全性和隔离性被内核模块拦截了。
[via]
几种网络通信方式的了解 一分钟看懂Docker的网络模式和跨主机通信
docker官方文档
Docker 动态添加端口映射解决思路
使用Docker的macvlan为容器提供桥接网络及跨主机通讯