关于docker 容器网络配置案例
docker实际使用中,我们可能会涉及到为某个容器指定特定的网络ip。不过,一般而言,在指定ip之前,我们可以创建一个自己的网络用来管理ip。对于docker容器,我们一般使用bridge网络。
首先,在创建网络前,我们肯定是需要知道当前有哪些网络的,那么,我们可以用如下命令查看docker当前已有的网络:
docker network ls
接下来,我们可以创建自己的网络了。这里以创建一个名为 casenet 的网络为例,具体操作如下:
docker network create --driver bridge --subnet=172.19.0.0/16 --gateway=172.19.0.1 casenet
对于操作中,我们要注意bridge 是我们设置的网络驱动,也就是前面提到的bridge网络。而 --subnet=172.19.0.0/16 , 则是我们创建的一个网络,其中,16指定了我们的子网掩码为16位,这样也就决定了我们的网络可用ip,对于具体网络知识这里就不做多说了,想了解更多的话,可以去深入网络知识学习,具体该怎样设置这个参数,我们可以根据我们需要的网络可用ip数量。
需要注意的是上述操作可能会出现错误:
ERROR: Pool overlaps with other one on this address space
对于这个问题产生的原因,是由于网络ip段已被使用的原因造成的。那么,我们要解决这个问题可以采用的办法包括:
- 修改subnet网段地址
- 删除已有的该网络。关于网络的删除可用命令:
docker network rm network_id
谈到这个问题,自然就引出了另一个问题,即我们在规划该网络的时候,需要考虑已有ip的使用情况,及无效的占用问题。
那么,这里就引出了另一个问题,我们如何查看已经使用的网络ip。
对此,我们可以先用前面提到的命令
docker network ls
来查看包含了哪些网络。
在知道了有哪些网络之后,我们可以通过命令:
docker network inspect network_id
来查看每个网络的ip信息,并进行统计,然后根据统计的结果再来规划我们的具体网络分配。
在分配好网络之后,我们从新执行前面的网络创建操作。到此为止,准备就绪。接下来,我们就将开始为一个容器配置特定的网络了。
话不多说,先给操作指令:
docker run -itd -h itman123.com --name itman123 --network=casenet --ip 172.19.0.4 centos /bin/bash
这样,就配置了一个名为itman123的centos容器。并运行起来了。如果我们在按此方法配置一个itman124的容器。那么,我们通过itman124就可以直接通过命令 ping 172.19.0.3
就可以ping通网络了。这样,我们就可以在本地加设多个。
这里需要注意一个问题,如果我们在centos这样的容器中,如果要用到root权限的话,需要将操作改为:
docker run --privileged -itd -h itman123.com --name itman123 --network=mynet --ip 172.19.0.3 centos /bin/bash/init
否则,对于ssh的server是无法链接的哦。