醋醋百科网

Good Luck To You!

Docker 网络配置_docker网络配置独立ip

Docker 的网络配置是容器通信和外部交互的核心,而 docker run 命令中的网络相关参数、Docker 内置的网络模式,以及自定义网络配置,共同构成了 Docker 网络的完整体系。以下从 网络模式详解关键网络参数容器通信案例 三个维度展开说明:

一、Docker 核心网络模式(4 种基础模式)

Docker 内置了 4 种网络模式,通过 --network 参数指定(默认是 bridge 模式),每种模式对应不同的网络隔离和通信规则。

1.bridge模式(默认模式)

  • 工作原理:容器连接到 Docker 内置的 bridge 网桥(默认名为 docker0),容器拥有独立 IP(如 172.17.0.x),通过 NAT 与宿主机网络交互。
  • 通信方式:同一宿主机内的容器可通过 容器名 / IP 互相通信(需在同一自定义桥接网络中,默认 bridge 网络需手动配置)。容器与外部网络通信需通过宿主机端口映射(-p 参数)。
  • 适用场景:单机环境下,多容器协同工作(如 Web 容器 + 数据库容器)。
  • 案例
    启动两个容器在默认 bridge 网络(需手动指定网络,默认网络不支持容器名解析):
# 创建自定义桥接网络(比默认 bridge 更灵活,支持容器名解析)
docker network create my-bridge-net
# 启动容器并加入自定义桥接网络
docker run -it -d -p 8081:80 --name my-nginx-1 -v ./:/usr/share/nginx/html --network my-bridge-net nginx:latest
docker run -d -p 5000:5000 -v app-data:/app --network my-bridge-net --name flask-demo my-flask-app:v1
# 在my-nginx-1容器内 ping flask-demo 容器(通过容器名通信)
/ # ping  flask-demo  # 成功返回,因为自定义桥接网络支持 DNS 解析

2.host模式

  • 工作原理:容器共享宿主机的网络命名空间(IP、端口、网卡等完全复用宿主机),容器没有独立 IP。
  • 通信方式:容器内的服务直接使用宿主机的端口(无需端口映射)。外部访问宿主机 IP: 端口 即可访问容器服务。
  • 适用场景:对网络性能要求极高(如高并发服务),或需要直接使用宿主机网络环境的场景。
  • 案例
    启动 Nginx 容器,直接使用宿主机的 80 端口:
docker run -d -v ./:/usr/share/nginx/html --network host --name host-nginx nginx

测试:

  • 此时访问宿主机的 http://宿主机IP 即可看到 Nginx 欢迎页(无需 -p 80:80 映射)。
  • 注意:容器会占用宿主机端口,需避免端口冲突。

3.host模式 vsbridge模式对比

维度

bridge 模式

host 模式

网络隔离

容器有独立网络命名空间

共享宿主机网络命名空间

端口占用

需端口映射(-p)

直接使用宿主机端口

安全性

隔离性好(默认无法访问宿主机)

隔离性差(容器可直接访问宿主机网络)

适用场景

多容器协同(单机)

高性能服务、依赖宿主机网络环境

4.none模式

  • 工作原理:容器拥有独立网络命名空间,但无任何网络配置(无 IP、无网卡),完全禁用网络。
  • 通信方式:无法与任何网络(包括宿主机和其他容器)通信。
  • 适用场景:无需网络的离线任务(如数据处理、日志分析)。
  • 案例
    启动一个仅处理本地文件的容器:
docker run -it --rm --network none nginx

5.overlay模式(跨主机通信)

  • 工作原理:基于 VXLAN 技术,在多个 Docker 主机(节点)之间创建虚拟网络,容器可跨主机通信(需依赖 Docker Swarm 或第三方编排工具)。
  • 通信方式:跨主机的容器在同一 overlay 网络中,可通过容器名 / IP 直接通信。
  • 适用场景:分布式集群(如微服务跨主机部署)。
  • 案例(基于 Docker Swarm):
# 初始化 Swarm 集群(管理节点)
docker swarm init

# 创建 overlay 网络
docker network create -d overlay my-overlay-net

# 在管理节点启动容器(自动加入 overlay 网络)
docker service create --name web --network my-overlay-net --replicas 2 nginx

# 在其他节点(已加入 Swarm)查看容器,跨节点容器可互相通信
docker ps

二、容器网络通信关键操作(案例)

1. 同一网络内容器通信(自定义 bridge 网络)

场景:如前面<1.bridge模式(默认模式)> 已有案例

2. 容器与外部网络通信(端口映射)

场景:让宿主机外部(如同一局域网的其他设备)访问容器内的服务。

docker run -d -p 5000:5000 -v app-data:/app --network my-bridge-net --name flask-demo my-flask-app:v1
# 宿主机外部设备通过 "宿主机IP:5000" 访问(如 192.168.1.100:5000)
curl http://宿主机IP:5000  # 成功访问容器内的 Flask 服务

3. 容器与宿主机通信(host 模式)

场景:容器直接使用宿主机网络,无需端口映射,适合需要高性能网络的场景。如前面<2.host模式>案例

三、自定义网络配置(docker network命令)

除了内置网络,可通过 docker network 命令创建、管理自定义网络,实现更灵活的隔离和通信规则。

1. 常用docker network命令

命令

作用

docker network create <name>

创建自定义网络(默认 bridge 类型)

docker network ls

列出所有网络

docker network inspect <name>

查看网络详情(含关联的容器、IP 等)

docker network connect <name> <container>

将容器加入网络

docker network disconnect <name> <container>

将容器从网络移除

docker network rm <name>

删除网络(需先断开所有容器)

2. 自定义网络高级配置(指定子网、网关)

场景:为容器分配固定网段的 IP(避免与宿主机网络冲突)。

# 创建自定义 bridge 网络,指定子网和网关
docker network create \
  --driver bridge \
  --subnet 192.168.100.0/24 \  # 子网
  --gateway 192.168.100.1 \    # 网关
  my-custom-net

# 启动容器时指定固定 IP(需在子网范围内)
docker run -d --name app \
  --network my-custom-net \
  --ip 192.168.100.10 \  # 固定 IP
  nginx

四、总结

Docker 网络模式的选择需根据场景决定:

  • 单机多容器通信:优先 自定义 bridge 网络(支持 DNS 解析,隔离性好)。
  • 高性能 / 无端口冲突需求:host 模式(但需注意端口占用)。
  • 无网络需求:none 模式
  • 跨主机集群:overlay 模式(依赖 Swarm 或 Kubernetes)。

通过合理配置网络,可实现容器间、容器与外部的安全、高效通信,是 Docker 部署的核心环节。

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言