一、自定义网络核心优势
与传统–link对比
能力 | 默认bridge±-link | 自定义网络 |
---|---|---|
自动dns解析 | 仅单向链接有效 | 全网络自动双向解析 |
服务发现 | 需手动维护链接 | 动态更新容器ip映射 |
网络隔离 | 共享默认bridge | 独立子网隔离 |
连接方式 | 仅允许已链接容器通信 | 网络内自由通信 |
二、网络创建与配置
2.1 创建自定义网络
# 创建带自定义参数的bridge网络 docker network create \ --driver=bridge \ --subnet=172.28.0.0/16 \ --gateway=172.28.0.1 \ --ipv6 --subnet=2001:db8:abc::/48 \ --label env=prod \ app-network # 验证网络配置 docker network inspect app-network
2.2 网络参数详解
参数 | 示例值 | 作用说明 |
---|---|---|
–driver | bridge/overlay/macvlan | 指定网络驱动类型 |
–subnet | 172.28.0.0/16 | 定义ipv4子网 |
–gateway | 172.28.0.1 | 设置默认网关 |
–ip-range | 172.28.5.0/24 | 限制ip分配范围 |
–aux-address | host1=172.28.1.5 | 保留指定ip避免分配冲突 |
三、容器连接与通信验证
3.1 部署多容器服务
# 运行数据库容器 docker run -d \ --name mysql-db \ --network app-network \ -e mysql_root_password=secret \ mysql:8.0 # 运行应用容器 docker run -d \ --name webapp \ --network app-network \ -p 8080:8080 \ -e db_host=mysql-db \ my-webapp:latest
3.2 通信验证方法
# 进入应用容器测试连接 docker exec -it webapp ping mysql-db # 查看dns解析记录 docker exec webapp cat /etc/resolv.conf # 网络连通性测试 docker exec webapp nc -zv mysql-db 3306
四、高级网络策略
4.1 容器别名机制
# 为容器添加别名 docker run -d \ --name legacy-app \ --network app-network \ --network-alias old-system \ legacy-app:v2 # 使用别名访问 docker exec webapp curl http://old-system:8000
4.2 网络安全配置
# 创建隔离网络 docker network create \ --internal \ --ipam-opt com.docker.network.bridge.enable_icc=false \ secure-network # 容器间访问控制 docker network connect --alias db --ip 172.29.0.101 app-network mysql-db
五、多网络架构设计
5.1 分层网络模型
# 前端网络 docker network create frontend-net --subnet=10.10.0.0/24 # 后端网络 docker network create backend-net --subnet=10.20.0.0/24 # 数据库网络 docker network create database-net --subnet=10.30.0.0/24
5.2 容器多网卡配置
# 连接多个网络 docker network connect frontend-net webapp docker network connect backend-net webapp # 查看网络接口 docker exec webapp ip addr show
六、生产环境最佳实践
6.1 网络规划建议
网络类型 | ip段分配 | 连接服务 |
---|---|---|
前端流量网络 | 172.18.0.0/20 | nginx、haproxy |
业务服务网络 | 192.168.16.0/20 | spring boot、node.js应用 |
数据存储网络 | 10.8.0.0/16 | mysql、redis、elasticsearch |
管理网络 | 10.255.0.0/24 | prometheus、consul |
6.2 网络监控方案
# 实时监控容器网络流量 docker run -it --rm --net=host nicolaka/netshoot \ nload -t 1000 -i 1024 -o 1024 eth0 # 抓包分析容器通信 docker run --cap-add=net_admin --net=container:webapp \ nicolaka/netshoot tcpdump -i eth0 port 3306 -vv
七、常见问题排查指南
7.1 网络连接故障树
7.2 典型错误解决
问题:ping: bad address 'mysql-db'
排查步骤:
确认容器处于同一网络
docker inspect webapp | grep networkmode
检查容器dns配置
docker exec webapp cat /etc/resolv.conf
手动解析测试
docker exec webapp nslookup mysql-db
以上就是docker如何自定义网络实现容器互通的详细内容,更多关于docker网络容器互通的资料请关注代码网其它相关文章!
发表评论