> 技术文档 > Docker Compose网络配置完全指南_docker-compose networks

Docker Compose网络配置完全指南_docker-compose networks


文章目录

  • 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: bridgeservices: web: networks: - frontend - backend db: networks: - backend

2.2 多网络接入实战

services: app: networks: - payment_network - notification_networknetworks: 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: - ecommercenetworks: ecommerce: driver: bridge

3.2 数据库隔离

services: mysql: networks: - db_internal configs: - source: mysql_conf target: /etc/mysql.cnf api: networks: - app_network - db_internalnetworks: db_internal: internal: true # 禁止外部访问 app_network: driver: bridge

四、高级网络技巧

4.1 静态IP分配

services: monitor: networks: monitoring_net: ipv4_address: 172.22.0.100networks: 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.prodnetworks: 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

六、最佳实践

  1. 命名规范

    • 项目名称使用小写+下划线
    • 网络名称明确表达用途(如:payment_gateway)
  2. 环境隔离

    networks: staging: driver: bridge production: driver: bridge
  3. 安全配置

    networks: sensitive_data: driver: bridge internal: true enable_ipv6: false
  4. 性能优化

    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: trueservices: 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: examplevolumes: redis_data:

关键配置解读:

  1. 前端服务暴露80端口
  2. 数据库和缓存使用内部网络
  3. Web应用同时连接前后端网络
  4. 明确的子网规划(10.5.0.0/24)
  5. 数据卷独立于网络配置

八、常见问题解决方案

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运维栈每天带你进步一点。