Docker安装后,默认会创建下面三种网络类型:
➜ ~ docker network ls
NETWORK ID NAME DRIVER SCOPE
c9e0ba5e6caa bridge bridge local
c1c6888f498a host host local
50a084d0ef9f none null local
-
bridge:桥接网络
默认情况下启动的Docker容器,都是使用 bridge,Docker安装时创建的桥接网络,每次Docker容器重启时,会按照顺序获取对应的IP地址,这个就导致重启下,Docker的IP地址就变了 -
none:无指定网络
使用--network=none
,docker 容器就不会分配局域网的IP -
host: 主机网络
使用--network=host
,此时,Docker 容器的网络会附属在主机上,两者是互通的。
例如,在容器中运行一个Web服务,监听8080端口,则主机的8080端口就会自动映射到容器中。
创建自定义网络:(设置固定IP)
启动Docker容器的时候,使用默认的网络是不支持指派固定IP的,所以需要创建自定义网络
创建自定义网络,并且指定网段:172.18.0.0/16,并取名为mynetwork
➜ ~ docker network create --subnet=172.18.0.0/16 mynetwork
docker中已经有4个网络了
➜ ~ docker network ls
NETWORK ID NAME DRIVER SCOPE
c9e0ba5e6caa bridge bridge local
c1c6888f498a host host local
c6e14fdaf31a mynetwork bridge local
50a084d0ef9f none null local
创建容器时给容器指定IP
以mysql为例
➜ ~ docker run -it --name mysql_test -e MYSQL_ROOT_PASSWORD=123456 --net mynetwork --ip 172.18.0.66 -p 3312:3306 -d 2c9028880e58
--net
指定网络名--ip
指定ip
可以看到容器ip正是在创建时指定的ip
➜ ~ mycli -h 172.18.0.66 -uroot -p123456 -P3306
MySQL
mycli 1.24.1
Home: http://mycli.net
Bug tracker: https://github.com/dbcli/mycli/issues
Thanks to the contributor - Seamile
MySQL root@172.18.0.66:(none)>
➜ ~ mycli -h 192.168.0.179 -uroot -p123456 -P3312
MySQL
mycli 1.24.1
Home: http://mycli.net
Bug tracker: https://github.com/dbcli/mycli/issues
Thanks to the contributor - Abirami P
MySQL root@192.168.0.179:(none)> exit
Goodbye!
两种方式都可以连接容器内的mysql
- mycli 是第三方的myql客户端工具
- 当使用容器内ip时对应的端口也应该是容器内端口,不是映射后的宿主机端口
修改已存在的容器ip
- 断开容器原本的网络
➜ ~ docker network disconnect mynetwork mysql_test
-
给容器指定新的网络
简单起见,这里使用刚才的网络,不创建新的
➜ ~ docker network connect mynetwork mysql_test --ip 172.18.0.66
--ip
可选,分配指定ip
- 重启容器
➜ ~ docker restart mysql_test
可以重新连接了!