我来为您详细介绍 Docker 网络的相关命令和概念:

Docker 网络基础概念
Docker 提供了几种网络驱动:
- bridge (默认): 适用于单主机容器通信
- host: 容器直接使用宿主机网络栈
- none: 容器无网络连接
- overlay: 用于 Docker Swarm 多主机通信
- macvlan: 为容器分配 MAC 地址,使其像物理设备
1. 创建 Docker 网络
创建自定义桥接网络
bash
# 基本创建
docker network create my-network
# 带特定子网和 IP 范围的网络
docker network create \
--subnet=172.20.0.0/16 \
--ip-range=172.20.240.0/20 \
--gateway=172.20.0.1 \
custom-network
# 创建不自动分配 IP 的网络
docker network create --internal isolated-network

创建 Overlay 网络(用于 Swarm)
bash
docker network create \
--driver overlay \
--subnet=192.168.1.0/24 \
swarm-network
2. 查看当前网络
查看所有网络列表
bash
docker network ls

查看特定网络详细信息
bash
docker network inspect bridge
docker network inspect custom-network

查看所有网络的详细信息
bash
docker network inspect $(docker network ls -q)

格式化输出网络信息
bash
docker network ls --format "table {{.ID}}\t{{.Name}}\t{{.Driver}}\t{{.Scope}}"

3. 将容器加入网络
在创建容器时指定网络
bash
# 创建容器时加入特定网络
#docker run -d --name web-server --network my-network nginx
docker run -d --name web-server --network custom-network nginx

bash
# 加入多个网络
docker run -d --name db-server nginx
docker network connect custom-network db-server

bash
# 查看容器所属网络
docker ps --format "table {{.Names}}\t{{.Networks}}"

动态将运行中的容器连接到网络
bash
docker network connect custom-network container-name
断开容器与网络的连接
bash
docker network disconnect custom-network container-name
bash
docker network disconnect custom-network db-server
# 查看容器所属网络
docker ps --format "table {{.Names}}\t{{.Networks}}"

4. 查看容器的网络配置
查看运行中容器的网络信息
bash
# 查看容器所属网络
docker ps --format "table {{.Names}}\t{{.Networks}}"
# 查看特定容器的网络详情
#docker inspect container-name | grep -A 20 NetworkSettings
docker inspect db-server| grep -A 20 NetworkSettings

查看容器的 IP 地址
bash
docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' container-name
# 或者查看所有网络的详细信息
docker inspect container-name --format='{{json .NetworkSettings}}'
bash
docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' db-server
# 或者查看所有网络的详细信息
docker inspect db-server--format='{{json .NetworkSettings}}'

5. 实用的网络管理命令
查看网络中的容器
bash
# 查看特定网络中的容器
docker network inspect custom-network --format='{{json .Containers}}'

查看网络统计信息
bash
docker stats --format "table {{.Container}}\t{{.MemUsage}}\t{{.CPUPerc}}" $(docker ps -q)

删除未使用的网络
bash
# 删除所有未使用的网络
docker network prune
# 删除特定网络(必须先停止使用该网络的容器)
docker network rm my-network

6. 实际示例:Hadoop 集群网络配置
假设您要为 Hadoop 集群创建专用网络:
bash
# 1. 创建 Hadoop 专用网络
docker network create \
--driver bridge \
--subnet=192.168.100.0/24 \
hadoop-network
# 2. 启动 Hadoop 容器并加入网络
docker run -d --name hadoop-namenode --network hadoop-network --ip 192.168.100.10 hadoop-image
docker run -d --name hadoop-datanode1 --network hadoop-network --ip 192.168.100.11 hadoop-image
# 3. 验证网络配置
docker network inspect hadoop-network
7. 故障排除常用命令
bash
# 测试容器间连通性
docker exec container1 ping container2
# 查看容器的网络接口
docker exec container-name ip addr show
# 查看路由表
docker exec container-name route -n
8. 网络清理
bash
# 删除所有未使用的资源(包括网络)
docker system prune
# 删除所有停止的容器、网络、镜像
docker system prune -a
这些命令可以帮助您全面管理和理解 Docker 网络配置,特别适用于像 Hadoop 这样的分布式应用部署场景。
附件
要确定 hadoop-pseudo 容器在 custom-network 中的 IP 地址,您需要先确保容器已在该网络中运行,然后通过以下命令查看其 IP 地址。
1. 首先确认容器状态
bash
# 检查容器是否正在运行
docker ps | grep hadoop-pseudo
2. 查看容器的 IP 地址
方法一:使用 docker inspect 命令
bash
# 获取容器的 IP 地址
docker inspect hadoop-pseudo | grep IPAddress
方法二:格式化输出 IP 地址
bash
# 更精确的 IP 查询
docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' hadoop-pseudo
方法三:查看详细的网络配置
bash
# 查看完整网络设置
docker inspect hadoop-pseudo --format='{{json .NetworkSettings}}'
方法四:针对特定网络获取 IP
bash
# 如果容器连接到多个网络,指定网络获取 IP
docker inspect hadoop-pseudo --format='{{.NetworkSettings.Networks.custom-network.IPAddress}}'
3. 查看网络详细信息
bash
# 查看 custom-network 的详细信息,包括所有连接的容器
docker network inspect custom-network
📌 IP 地址范围说明
如果 custom-network 是使用默认设置创建的,Docker 通常会分配类似以下范围的 IP:
- 默认桥接网络 :通常是
172.17.0.x或172.18.0.x - 自定义网络 :如果是使用
--subnet=192.168.100.0/24创建的,则是192.168.100.x
🔄 动态 IP 分配
Docker 会自动为每个容器分配一个唯一的 IP 地址,通常是:
- 第一个连接的容器:
172.x.0.2 - 第二个容器:
172.x.0.3 - 依此类推...
📝 实际操作示例
bash
# 执行后可能看到类似输出
$ docker inspect -f '{{.NetworkSettings.Networks.custom-network.IPAddress}}' hadoop-pseudo
172.18.0.2
⚠️ 注意事项
- 容器必须正在运行才能获取 IP 地址
- 如果重启容器,IP 地址可能会改变(除非设置了固定 IP)
- 不同网络会有不同的 IP 段
🔧 设置固定 IP(可选)
如果您希望容器始终使用相同的 IP 地址:
bash
docker run -d \
--name hadoop-pseudo \
--hostname hadoop-pseudo \
--network custom-network \
--ip 172.18.0.100 \
-p 50070:50070 \
-p 8088:8088 \
-p 9000:9000 \
-v ~/hadoop-conf:/usr/local/hadoop/etc/hadoop \
-v pseudo-hadoop-namenode:/hadoop-data/namenode \
-v pseudo-hadoop-datanode:/hadoop-data/datanode \
-v pseudo-hadoop-tmp:/hadoop-data/tmp \
--privileged \
hadoop-pseudo:3.3.0
现在您可以执行上述命令来查看 hadoop-pseudo 容器的具体 IP 地址!