Docker Compose网络配置指南分享

 更新时间:2025年11月18日 09:03:01   作者:东方、宏  
本文详细介绍了Docker网络配置的各个方面,包括基础网络架构、自定义网络配置、典型场景配置、高级网络技巧、调试与诊断以及最佳实践,通过多个实战案例和常见问题解决方案,帮助读者更好地理解和应用Docker网络技术

一、基础网络架构

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

六、最佳实践

  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: 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:

关键配置解读:

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

八、常见问题解决方案

Q1:服务间无法解析主机名

  • 检查是否使用相同网络
  • 确认服务名称拼写正确
  • 尝试使用完整域名:<service>.<network>

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

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Docker 安装 MySQL 并实现远程连接教程

    Docker 安装 MySQL 并实现远程连接教程

    这篇文章主要介绍了Docker 安装 MySQL 并实现远程连接的教程,帮助大家更好的理解和使用docker容器,感兴趣的朋友可以了解下
    2020-09-09
  • Docker搭建Elasticsearch集群和Kibana全过程

    Docker搭建Elasticsearch集群和Kibana全过程

    这篇文章主要介绍了Docker搭建Elasticsearch集群和Kibana全过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-05-05
  • 详解利用ELK搭建Docker容器化应用日志中心

    详解利用ELK搭建Docker容器化应用日志中心

    这篇文章主要介绍了详解利用ELK搭建Docker容器化应用日志中心,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-04-04
  • Docker搭建OpenLDAP+phpLDAPadmin统一用户认证的方法

    Docker搭建OpenLDAP+phpLDAPadmin统一用户认证的方法

    这篇文章主要介绍了Docker搭建OpenLDAP+phpLDAPadmin统一用户认证,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-12-12
  • 详解Docker源码编译安装

    详解Docker源码编译安装

    本篇文章主要介绍了详解Docker源码编译安装,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-03-03
  • Docker端口映射后,外机访问不了的问题及解决

    Docker端口映射后,外机访问不了的问题及解决

    Docker端口映射后外机访问不了的问题可能包括:网络配置错误(需与宿主机在同一网段)、容器未启动、防火墙设置问题(需关闭或开放映射端口)、未开启IP转发
    2025-02-02
  • Docker打包镜像及修改配置的实现

    Docker打包镜像及修改配置的实现

    这篇文章主要介绍了Docker打包镜像及修改配置的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-01-01
  • docker实现MySQL主从双备的示例代码

    docker实现MySQL主从双备的示例代码

    本文主要介绍了docker实现MySQL主从双备,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-01-01
  • docker容器资源限制与容器内的dotnet应用线程限制

    docker容器资源限制与容器内的dotnet应用线程限制

    文章指出因docker-compose资源限制配置错误(如误将cpu设为0.5导致线程过多),引发redis超时问题,同时微服务中大key、热key等不合理操作加剧redis性能瓶颈,需优化代码和容器参数设置
    2025-09-09
  • 云centos开启docker远程服务链接的实现步骤

    云centos开启docker远程服务链接的实现步骤

    本文主要介绍了云centos开启docker远程服务链接,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-09-09

最新评论