docker常用命令之network

10 阅读4分钟

一、docker network 核心概念

Docker 网络是实现容器间通信、容器与宿主机 / 外部网络通信的基础,默认包含 3 种内置网络模式:

表格

网络模式作用
bridge默认网络,容器接入此网络可通过网桥与宿主机 / 其他容器通信(最常用)
host容器直接使用宿主机网络栈,无网络隔离,容器端口与宿主机端口直接映射
none容器无网络(仅回环地址),完全隔离,需手动配置网络
自定义网络手动创建的 bridge/overlay/macvlan 网络,可自定义网段、网关,隔离性更好

二、docker network 核心命令(按使用频率排序)

1. 查看网络列表(基础)

bash

运行

# 查看所有Docker网络(默认显示名称、驱动、作用域)
docker network ls

# 输出示例:
NETWORK ID     NAME      DRIVER    SCOPE
abc123456789   bridge    bridge    local  # 默认bridge网络
def098765432   host      host      local  # 默认host网络
ghi789012345   none      null      local  # 默认none网络
  • 关键字段

    • DRIVER:网络驱动(bridge/host/none/overlay 等);
    • SCOPE:作用域(local = 本地,swarm = 集群)。

2. 查看网络详情(排错必备)

bash

运行

# 查看指定网络的详细信息(如默认bridge网络)
docker network inspect bridge

# 输出包含:网段(Subnet)、网关(Gateway)、已连接容器(Containers)等核心信息
# 示例(关键片段):
"IPAM": {
  "Driver": "default",
  "Config": [
    {
      "Subnet": "172.17.0.0/16",  # 默认bridge网段
      "Gateway": "172.17.0.1"     # 默认网关(宿主机网桥地址)
    }
  ]
},
"Containers": {  # 已连接到此网络的容器
  "容器ID": {
    "Name": "容器名",
    "IPv4Address": "172.17.0.2/16"  # 容器IP
  }
}

3. 创建自定义网络(实战常用)

默认 bridge 网络存在隔离性差、容器名无法直接通信的问题,建议创建自定义 bridge 网络:

bash

运行

# 创建自定义bridge网络(指定网段和网关,推荐)
docker network create --driver bridge --subnet 192.168.100.0/24 --gateway 192.168.100.1 my-custom-network

# 参数说明:
# --driver bridge:指定驱动为bridge(默认)
# --subnet:自定义网段(避免与宿主机/其他网络冲突)
# --gateway:自定义网关
# my-custom-network:网络名称(自定义)

4. 连接容器到网络

bash

运行

# 方式1:创建容器时指定网络
docker run -d --name nginx-test --network my-custom-network nginx:latest

# 方式2:将已运行的容器连接到网络
docker network connect my-custom-network 容器名/容器ID

# 示例:将已运行的nginx容器连接到自定义网络
docker network connect my-custom-network nginx-test

5. 断开容器与网络的连接

bash

运行

# 断开容器与指定网络的连接
docker network disconnect my-custom-network 容器名/容器ID

6. 删除网络

bash

运行

# 删除指定网络(需先断开所有容器连接)
docker network rm my-custom-network

# 清理所有未使用的网络(推荐定期清理)
docker network prune
# 执行后会提示确认,输入y即可删除所有无容器连接的网络

三、实战场景示例

场景 1:容器间通过自定义网络通信

bash

运行

# 1. 创建自定义网络
docker network create my-app-network

# 2. 启动两个容器接入此网络
docker run -d --name app1 --network my-app-network busybox sleep 3600
docker run -d --name app2 --network my-app-network busybox sleep 3600

# 3. 进入app1容器,ping app2(自定义网络支持容器名解析)
docker exec -it app1 ping app2
# 输出:能ping通(默认bridge网络也支持,但自定义网络更稳定)

场景 2:排查容器网络不通问题

bash

运行

# 1. 查看容器所属网络
docker inspect 容器名 | grep -i networkmode

# 2. 查看网络详情,确认容器IP和网关
docker network inspect 网络名

# 3. 测试容器到网关/外部网络的连通性
docker exec -it 容器名 ping 网关IP  # 如192.168.100.1
docker exec -it 容器名 ping 8.8.8.8  # 测试外网连通性

场景 3:映射容器端口到宿主机(结合网络)

bash

运行

# 启动容器,接入自定义网络,并映射80端口到宿主机8080
docker run -d --name nginx-web --network my-custom-network -p 8080:80 nginx:latest

# 验证:宿主机访问http://localhost:8080 或 其他机器访问http://宿主机IP:8080

四、常见问题解决

  1. 容器无法访问外网

    • 检查容器网关是否正确(docker network inspect 网络名);
    • 检查宿主机防火墙(systemctl status firewalld),放行 Docker 网段;
    • 重启 Docker 网络服务:systemctl restart docker
  2. 自定义网络创建失败(网段冲突)

    • 更换网段(如 192.168.200.0/24),避免与宿主机网卡、其他网络重叠;
    • 执行ip addr查看宿主机网段,确保自定义网段不冲突。
  3. 容器名无法解析

    • 仅自定义 bridge 网络和默认 bridge 网络支持容器名解析,host/none 网络不支持;
    • 确保容器已接入同一网络:docker network inspect 网络名查看 Containers 列表。

总结

  1. 核心命令docker network ls(查看)、inspect(详情)、create(创建)、connect/disconnect(连接 / 断开)、rm/prune(删除 / 清理)是高频用法。
  2. 最佳实践:优先使用自定义 bridge 网络(而非默认 bridge),自定义网段和网关,提升网络隔离性和可维护性。
  3. 排错关键:通过docker network inspect查看网络配置,通过容器内ping测试连通性,定位网络不通问题。