Docker Compose网络配置完全指南
文章目录
- Docker Compose网络配置完全指南
- 一、基础网络架构
- 1.1 默认网络行为
- 1.2 网络查看命令
- 二、自定义网络配置
- 2.1 显式定义网络
- 2.2 多网络接入实战
- 三、典型场景配置
- 3.1 微服务间通信
- 3.2 数据库隔离
- 四、高级网络技巧
- 4.1 静态IP分配
- 4.2 跨项目通信
- 4.3 网络别名
- 五、调试与诊断
- 5.1 网络测试容器
- 5.2 常用诊断命令
- 六、最佳实践
- 七、完整实战案例
- 八、常见问题解决方案
- Q1:服务间无法解析主机名
- Q2:端口冲突
- Q3:网络性能瓶颈
Docker Compose网络配置完全指南
一、基础网络架构
1.1 默认网络行为
每个docker-compose.yml文件会自动创建:
- 1个专属bridge网络(默认驱动)
- 所有service自动加入该网络
- 服务间通过
服务名称
直接通信
# docker-compose.yml示例
version: '3.8'
services:
web:
image: nginx:alpine
ports:
- "8080:80"
redis:
image: redis:alpine
1.2 网络查看命令
# 查看项目网络
docker network ls | grep <project_name>
# 查看容器网络详情
docker-compose run web curl redis:6379
二、自定义网络配置
2.1 显式定义网络
version: '3.8'
networks:
frontend:
driver: bridge
ipam:
config:
- subnet: 172.20.0.0/24
backend:
driver: bridge
services:
web:
networks:
- frontend
- backend
db:
networks:
- backend
2.2 多网络接入实战
services:
app:
networks:
- payment_network
- notification_network
networks:
payment_network:
driver: bridge
notification_network:
driver: bridge
三、典型场景配置
3.1 微服务间通信
services:
order-service:
networks:
- ecommerce
environment:
- CART_SERVICE_URL=http://cart-service:8000
cart-service:
networks:
- ecommerce
networks:
ecommerce:
driver: bridge
3.2 数据库隔离
services:
mysql:
networks:
- db_internal
configs:
- source: mysql_conf
target: /etc/mysql.cnf
api:
networks:
- app_network
- db_internal
networks:
db_internal:
internal: true # 禁止外部访问
app_network:
driver: bridge
四、高级网络技巧
4.1 静态IP分配
services:
monitor:
networks:
monitoring_net:
ipv4_address: 172.22.0.100
networks:
monitoring_net:
ipam:
config:
- subnet: 172.22.0.0/24
4.2 跨项目通信
# 项目A的compose文件
networks:
shared_net:
name: cross_project_net
# 项目B的compose文件
networks:
shared_net:
external: true
name: cross_project_net
4.3 网络别名
services:
database:
networks:
main_network:
aliases:
- primary-db
- mysql.prod
networks:
main_network:
五、调试与诊断
5.1 网络测试容器
services:
tester:
image: nicolaka/netshoot
command: sleep infinity
networks:
- app_network
5.2 常用诊断命令
# 查看容器网络配置
docker-compose exec web ifconfig
# 测试服务间连通性
docker-compose run tester curl -v api:3000
# 查看DNS解析
docker-compose run tester dig web
六、最佳实践
-
命名规范:
- 项目名称使用小写+下划线
- 网络名称明确表达用途(如:payment_gateway)
-
环境隔离:
networks: staging: driver: bridge production: driver: bridge
-
安全配置:
networks: sensitive_data: driver: bridge internal: true enable_ipv6: false
-
性能优化:
networks: high_perf: driver: bridge options: com.docker.network.bridge.name: br-highperf com.docker.network.driver.mtu: 9000
七、完整实战案例
version: '3.8'
networks:
front:
driver: bridge
ipam:
config:
- subnet: 10.5.0.0/24
back:
internal: true
services:
webapp:
build: .
networks:
- front
- back
ports:
- "80:8000"
depends_on:
- cache
cache:
image: redis:6
networks:
- back
volumes:
- redis_data:/data
db:
image: postgres:13
networks:
- back
environment:
POSTGRES_PASSWORD: example
volumes:
redis_data:
关键配置解读:
- 前端服务暴露80端口
- 数据库和缓存使用内部网络
- Web应用同时连接前后端网络
- 明确的子网规划(10.5.0.0/24)
- 数据卷独立于网络配置
八、常见问题解决方案
Q1:服务间无法解析主机名
- 检查是否使用相同网络
- 确认服务名称拼写正确
- 尝试使用完整域名:
.
Q2:端口冲突
ports:
- "127.0.0.1:8080:80" # 限制本地访问
- "8000-8010:8000-8010" # 端口范围映射
Q3:网络性能瓶颈
- 尝试host网络模式(需要删除端口映射)
- 调整MTU值
- 使用macvlan驱动
networks:
perf_net:
driver: macvlan
driver_opts:
parent: eth0
ipam:
config:
- subnet: 192.168.1.0/24
gateway: 192.168.1.1
期待您能关注公众号
原宏Cloud运维栈
每天带你进步一点。