Docker 网络

我来为您详细介绍 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.x172.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

⚠️ 注意事项

  1. 容器必须正在运行才能获取 IP 地址
  2. 如果重启容器,IP 地址可能会改变(除非设置了固定 IP)
  3. 不同网络会有不同的 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 地址!

相关推荐
盟接之桥2 小时前
打破全球供应链“黑盒”:盟接之桥®如何用标准化EDI重塑中国制造的数据主权与交付底气
大数据·网络·人工智能·汽车·制造
Cat_Rocky2 小时前
Docker镜像瘦身
运维·docker·容器
酣大智2 小时前
eNSP中AR报错40,重新安装
网络·华为
墨染天姬2 小时前
【V2X】BP QMI框架概述
网络
云深麋鹿2 小时前
C++ | 容器list
开发语言·c++·容器·list
叶子2024222 小时前
电网面试回答
网络·面试·职场和发展
网络安全实验室3 小时前
【程序人生】程序员接私活常用平台汇总_嵌入式开发外包平台
网络·python·学习·程序人生·web安全·面试·职场和发展
志栋智能3 小时前
超自动化安全:释放安全专家创造力的钥匙
运维·服务器·网络·人工智能·自动化
网络安全许木3 小时前
自学渗透测试第19天(ARP欺骗原理与Ettercap实战)
网络·web安全·渗透测试