Skip to content

09.Docker Network

当使用 Docker 运行容器时,会有以下 3 种网络:

桥接网络、无网络和主机网络

image-20250129122709558

桥接网络(Bridge)

默认方式。

当使用 Docker 运行容器时,默认情况下使用桥接网络, Docker 会在内部自动创建一个网络,一般 IP 范围为 172.17.x.x ,在此 IP 范围内的容器之间可以相互访问。

要使宿主机能够访问容器内部网络,需要建立端口映射,使用 -p 选项。

建立多个桥接网络

默认情况下, Docker 只会创建一个内部网络,默认 IP Host 为 172.17.0.1 ,如果想要创建其它 IP 范围的网络,需要手动创建。如创建一个子网为 182.18.0.0 ,网关为 182.18.0.1 的子网:

bash
docker network create --driver bridge --subnet 182.18.0.0/16 --gateway 182.18.0.1 custom-isolated-network
  • --driver 指定创建网络的驱动
  • --subnet 指定创建的子网 IP
  • 最后的参数为网络名称

若要使容器部署在这个子网,在运行容器时指定 --network 选项为该网络名称,如:

bash
docker run -e MYSQL_ROOT_PASSWORD=db_pass123 -d --network custom-isolated-network mysql:5.6

无网络(None)

指定无网络,使用 --network 参数,指定 none

bash
docker run --network=none ubuntu

这样创建的容器将不会连接任何网络

主机网络(Host)

指定使用主机网络运行容器,使用 --network 参数,指定 host

bash
docker run --network=host ubuntu

这会和主机共享网络端口,因此,主机和容器将不能使用同一个端口号。

查看 Docker 网络

使用 docker network ls 查看当前所有的网络。

查看容器的网络情况

使用 inspect 查看容器内部的网络情况:

bash
docker inspect blissful_hopper

示例输出如下:

cmd
X:>docker inspect ubuntu
[
    ...
        "NetworkSettings": {
            "Bridge": "",
            "SandboxID": "05480983265d3fb8deff056eb7818dbff6ca24f27911653355990fb7b422c611",
            "SandboxKey": "/var/run/docker/netns/05480983265d",
            "Ports": {},
            "HairpinMode": false,
            "LinkLocalIPv6Address": "",
            "LinkLocalIPv6PrefixLen": 0,
            "SecondaryIPAddresses": null,
            "SecondaryIPv6Addresses": null,
            "EndpointID": "7a4ff37efbc2349964a71cdb499c05ea11f785dffbdc9bee0224a8e8f1c3799b",
            "Gateway": "172.17.0.1",
            "GlobalIPv6Address": "",
            "GlobalIPv6PrefixLen": 0,
            "IPAddress": "172.17.0.2",
            "IPPrefixLen": 16,
            "IPv6Gateway": "",
            "MacAddress": "02:42:ac:11:00:02",
            "Networks": {
                "bridge": {
                    "IPAMConfig": null,
                    "Links": null,
                    "Aliases": null,
                    "MacAddress": "02:42:ac:11:00:02",
                    "DriverOpts": null,
                    "NetworkID": "2d4e116e46919b9d1bfbdb45290dd66ce436b1bb86c299eefa1789f01f9c1a52",
                    "EndpointID": "7a4ff37efbc2349964a71cdb499c05ea11f785dffbdc9bee0224a8e8f1c3799b",
                    "Gateway": "172.17.0.1",
                    "IPAddress": "172.17.0.2",
                    "IPPrefixLen": 16,
                    "IPv6Gateway": "",
                    "GlobalIPv6Address": "",
                    "GlobalIPv6PrefixLen": 0,
                    "DNSNames": null
                }
            }
        }
    }
]