目录

docker自定义网络模式

目录

docker自定义网络模式,实现容器固定ip地址

我们在使用Docker容器时候,每次启动容器,容器分配到的虚拟IP经常变动,比如我们现在使用Mycat + Mysql,我们是需要配置Mysql服务IP地址的,这个IP是Docker分配的虚拟IP,假如老是变,那我们还得老是修改配置,那就很麻烦了;所以我们需要固定手工分配容器IP;

Docker默认使用的是bridge 桥接网络模式,

我们可以查看下 docker network ls

http://img.cana.space/picStore/20201121124621.png

我们创建自定义网络模式;docker network create --subnet=172.20.0.0/16 extnetwork

http://img.cana.space/picStore/20201121124645.png

创建容器并指定IP;通过--net extnetwork --ip 172.20.0.2 指定

案例:

1
2
3
docker run -p 3306:3306 --name master   -d  -v /home/mysql/mysql.conf.d/:/etc/mysql/mysql.conf.d/ -v /home/mysql/log/:/var/log --net extnetwork --ip 172.20.0.2  -e MYSQL_ROOT_PASSWORD=123456  镜像ID 

 docker run -p 3307:3306 --name slave   -d  -v /home/mysql2/mysql.conf.d/:/etc/mysql/mysql.conf.d/ -v /home/mysql2/log/:/var/log --net extnetwork --ip 172.20.0.3 -e MYSQL_ROOT_PASSWORD=123456  镜像ID 

我们启动两个Mysql容器,并且固定分配IP 172.20.0.2和172.20.0.3 (注意:这里必须用172.20.0.2开始分配,因为172.20.0.1是网关;)

查看ip

docker inspect 容器id

http://img.cana.space/picStore/20201121124756.png

http://img.cana.space/picStore/20201121124804.png

完美分配了;我们后面mycat也分配一个 172.20.0.4 这样就容易运维了;

扩展:

ERROR: Pool overlaps with other one on this address space

错误原因:networks参数下手动指定了subnet地址,此地址发生了冲突。

解决:

1
2
3
docker network ls # 查看docker网卡
docker network inspect <网卡id> # 查看具体信息,找到与subnet冲突的是哪个
docker network rm <网卡id> # 删除冲突的网卡

之后重新运行docker-compose up -d命令即可。