前言
Docker 安装后,默认会创建三种网络类型,bridge、host和none,可通过如下命令查看:
sudo docker network ls
- bridge:网络桥接
默认情况下启动、创建容器都是用桥接模式,所以每次 Docker 容器重启时会按照启动顺序获取对应桥接 IP 地址,这就导致容器每次重启,Docker 容器的 IP 地址都发生变化。 - none:无指定网络
Docker run 启动容器时,可以添加 –network=none 参数不分配 IP 给当前启动的容器。 - host:主机网络
Docker 容器的网络会附属在主机上,两者是互通的。
步骤
1、创建自定义网络类型,并且指定网段
sudo docker network create --subnet=192.168.1.0/24 mynet
注意:192.168.1.0/24 是 CIDR 无类别域间路由,翻译过来的意思是:
可用 IP 数量:254 网络:192.168.1.0 子网掩码:255.255.255.0 第一可用:192.168.1.1 最后可用:192.168.1.254 广播地址:192.168.1.255
通过指令 docker network ls 可以查看到网络类型中多了一个 mynet
2、使用新的网络类型创建并启动容器
sudo docker run -it --name ubuntu --net mynet --ip 192.168.1.2 ubuntu /bin/bash
注意:分配容器 IP 要从 192.168.1.2 开始分配,可以分配到 192.168.1.254。不能从 192.168.1.1 开始分配,因为 192.168.1.1 是宿主机也是所有该网段下容器的网关。
通过指令 docker inspect 可以查看容器 IP 为 192.168.1.2,关闭容器并重启,发现容器 IP 并未发生改变。
后语
Docker 在不创建自定义网络的情况下是无法分配固定 IP 的。