Docker的网络类型和固定IP设置

Docker的网络机制

Docker的网络有三种类型(driver): bridge, host 和 null.

  • birdge: 就如同桥接的switch/hub, 使用bridge网络的container会分配一个当前bridge配置的子网IP, 在通过run创建container时通过 --ip 指定.
  • host: 需要使用 --network=host 参数指定. 使用主机网络, 此时 container 的网络会附属在主机上, 两者是互通的. 例如在container中的服务监听8080端口, 则主机的8080端口就会自动映射到这个端口.
  • none: 需要使用 --network=none 参数指定. 不分配局域网的IP

可以通过命令 docker network ls 和 docker network inspect [name] 查看

$ docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
771ed6aaa9f8        bridge              bridge              local
243e4b881761        host                host                local
1c2c6b04e22c        none                null                local

$ docker network inspect bridge
[
    {
        "Name": "bridge",
        "Scope": "local",
        "Driver": "bridge",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": null,
            "Config": [
                {
                    "Subnet": "172.17.0.0/16",
                    "Gateway": "172.17.0.1"
                }
            ]
        },
      ...
    }
]

在宿主机上, 通过ifconfig能看到bridge的网关IP, 而container IP是不能直接看到的.

创建自定义Network

启动Docker容器的时候,使用默认的网络是不支持指派固定IP的

docker run -itd --net bridge --ip 172.17.0.10 centos:latest /bin/bash
6eb1f228cf308d1c60db30093c126acbfd0cb21d76cb448c678bab0f1a7c0df6
docker: Error response from daemon: User specified IP address is supported on user defined networks only.

需要使用自定义的network, 创建完后, 在宿主机上能看到新的bridge 的网关IP

$ docker network create --subnet=192.168.250.1/24 mybridge
760fb4aec8aef1eacece34d3a28aee1eabde7c47ce8ef9ec646c7c320a4da195

$ docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
771ed6aaa9f8        bridge              bridge              local
243e4b881761        host                host                local
760fb4aec8ae        mybridge            bridge              local
1c2c6b04e22c        none                null                local

使用固定IP创建Container

$ docker run --name eureka -itd --net mybridge --ip 192.168.250.3 scot-eureka:latest /bin/bash
ba7f9fcb4178c5181d3ea85eca5d03a132b8f32727c1ca0ee13bfd1ec15e4cc8

$ ping 192.168.250.3
PING 192.168.250.3 (192.168.250.3) 56(84) bytes of data.
64 bytes from 192.168.250.3: icmp_seq=1 ttl=64 time=0.102 ms
64 bytes from 192.168.250.3: icmp_seq=2 ttl=64 time=0.102 ms

猜你喜欢

转载自www.cnblogs.com/milton/p/9858955.html