Docker创建自定义网络并设置容器固定ip

创建自定义网络

docker安装后,默认会创建三种网络类型,bridge、host和none,可通过如下命令查看

[root@docker ~]# docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
10444c7364b6        bridge              bridge              local
2787e12ad00d        host                host                local
70ec14cd5afc        none                null                local
  • bridge:网络桥接 :bridge模式是Docker默认的网络设置,此模式会为每一个容器分配Network Namespace、设置IP等,并将并将一个主机上的Docker容器连接到一个虚拟网桥上。当Docker server启动时,会在主机上创建一个名为docker0的虚拟网桥,此主机上启动的Docker容器会连接到这个虚拟网桥上。每次docker容器重启时会按照顺序获取对应ip地址,这就导致容器每次重启,ip都发生变化

  • host:主机网络 :如果启动容器的时候使用host模式,那么这个容器将不会获得一个独立的Network Namespace,而是和宿主机共用一个Network Namespace。容器将不会虚拟出自己的网卡,配置自己的IP等,而是使用宿主机的IP和端口。

  • none:在none模式下,Docker容器拥有自己的Network Namespace,但是,并不为Docker容器进行任何网络配置。也就是说,这个Docker容器没有网卡、IP、路由等信息。需要我们自己为Docker容器添加网卡、配置IP等。

有时候我们使用容器需要用到一些指定的地址段,比如192.168网段地址,可以创建自定义的网络类型并指定ip地址段

  • 创建一个名叫 mynet 的网络类型,并设置其网段为192.168.0.0/16的网络
[root@docker ~]# docker network create --subnet=192.168.0.0/16 mynet

查看创建的网卡,多了一个name 为mynet的网络

[root@docker ~]# docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
10444c7364b6        bridge              bridge              local
2787e12ad00d        host                host                local
657399fa1c83        mynet               bridge              local
70ec14cd5afc        none                null                local
  • 使用新的网络类型创建并启动一个容器
[root@docker ~]# docker run --name yufu -it -d --net mynet centos bash
  • 查看yufu 这个容器的详细信息
[root@docker ~]# docker inspect yufu

....ipaddress 部分....
      "Gateway": "192.168.0.1",
                    "IPAddress": "192.168.0.2",
                    "IPPrefixLen": 16,
                    "IPv6Gateway": "",
                    "GlobalIPv6Address": "",
                    "GlobalIPv6PrefixLen": 0,
                    "MacAddress": "02:42:c0:a8:00:02",
                    "DriverOpts": null

但是此时,如果需要容器访问外网还需要修改它的DNS
此时启动的容器中使用的DNS还是docker的桥接模式下的地址,这里需要修改可以访问外网的dns,如下

[root@80f8b4985aef /]# cat /etc/resolv.conf 
nameserver 114.114.114.114
options ndots:0

  • 修改后访问外网
[root@80f8b4985aef /]# ping bing.com
PING bing.com (13.107.21.200) 56(84) bytes of data.
64 bytes from 13.107.21.200 (13.107.21.200): icmp_seq=1 ttl=127 time=46.4 ms
64 bytes from 13.107.21.200 (13.107.21.200): icmp_seq=2 ttl=127 time=44.1 ms

docker设置容器的固定ip

启动Docker容器的时候,使用默认的网络bridge是不支持指派固定IP的,(因为bridge模式的网络是在启动时依照ip地址顺序分派的),如下

[root@docker ~]# docker run --name webserver -itd --network bridge --ip 172.17.0.5 centos bash
ac1bb41a6f790d487588270089ae5c206fd7e1016b032f2af31b85b93b8aeb5d
docker: Error response from daemon: user specified IP address is supported on user defined networks only.

因此,需要创建自定义网络,在上面创建的mynet网络中,可以将容器启动为mynet网络并指定一个固定的ip。如下

[root@docker ~]# docker run --name web -itd --network mynet --ip 192.168.0.111 centos bash
  • 查看该容器地址
[root@docker ~]# docker inspect web | grep 192.168.0.111
                    "IPv4Address": "192.168.0.111"
                    "IPAddress": "192.168.0.111",

点赞

发表评论

电子邮件地址不会被公开。 必填项已用*标注