docker入门(三)

docker容器IP“暴露”到外网(宿主机外)

首先将docker容器IP固定

Docker自身的4种网络工作方式,简略说明下:

host模式,使用--net=host指定。

container模式,使用--net=container:NAME_or_ID指定。

none模式,使用--net=none指定。

bridge模式,使用--net=bridge指定,默认设置。

可以通过命令docker network ls查看。具体细节自行查阅官方文档。

因为docker的这四种网络都禁止用户为容器指定固定ip,所以需要自己创建网络。

docker network create --subnet=172.172.0.0/24 docker-br0

执行上述创建语句,再次执行docker network ls,docker network列表中多了我们刚创建的自定义网络,ip段可以自己定义,/24 是子网掩码。

有了自定义网卡,我们就可以为新启动的容器指定固定ip了。

docker run -itd --net=docker-br0 --ip 172.172.0.101 --name init busybox 

docker exec -it init /bin/sh

进入容器后执行

ifconfig

分配了我们指定的172.172.0.101。

暴露ip给外网

举个实际场景。

我的开发环境是mac,在mac上安装了centos虚拟机,然后在这台centos上安装了docker,并启动了刚才的docker容器。

docker容器内是可以ping同mac的IP,但是mac是无法ping通docker容器的。

所以我们需要将所有访问容器ip段(172.172.0.0/24)的连接都交由虚拟机(centos)进行路由。

执行以下命令

ip route add 172.172.0.0/24 via 10.1.10.95 dev en4

10.1.10.95是虚拟机centos的ip地址。en4是mac上的网卡(可以通过ifconfig查看)。

mac上没有ip这个命令,需要单独安装:

brew install iproute2mac

查看刚添加好的路由

ip route

如果要删除

ip route del 172.172.0.0/24

好了,现在可以ping同刚创建的容器了

相信看到这里,应该明白怎么将容器IP“暴露”出去了。

上一篇:CF833E Caramel Clouds


下一篇:学习了django对于sqlite3进行了了解,谈谈看法