当前位置: 首页 > news >正文

docker-compose常用的网络模式有哪些?

Docker Compose 中常用的网络模式主要继承自 Docker 本身的网络模型,同时提供了更便捷的网络管理方式。以下是常用的网络模式及特点:

1. bridge 模式(默认模式)

  • 特点:Docker 最常用的网络模式,Compose 会为每个项目自动创建一个默认的 bridge 网络(默认名称为 项目名_default),所有未指定网络模式的服务都会自动加入这个网络。
  • 通信方式:同一网络内的服务可以通过 服务名 互相访问(Docker 内置 DNS 解析),无需暴露端口到主机;若需外部访问,需通过 ports 配置端口映射(如 8080:80)。
  • 适用场景:绝大多数常规场景,适合多服务之间需要通信但又需要一定网络隔离的情况。
  • 配置示例
    默认无需额外配置,或显式指定:
    services:web:image: nginx# 默认加入项目的默认 bridge 网络ports:- "8080:80"  # 外部可通过主机 8080 访问容器 80 端口
    

2. host 模式

  • 特点:容器直接使用主机的网络栈(共享主机的 IP 和端口),容器内的端口会直接绑定到主机对应的端口,无需端口映射
  • 通信方式:容器与主机共享网络,服务间可通过 localhost 或主机 IP 通信;外部访问直接使用主机端口。
  • 限制
    • 不支持 ports 配置(会被忽略并警告);
    • 跨平台兼容性差(在 Windows/macOS 上可能受限)。
  • 适用场景:需要高性能网络(如减少网络开销)、或需要直接使用主机网络资源(如绑定特权端口)的场景。
  • 配置示例
    services:app:image: myappnetwork_mode: host  # 使用主机网络
    

3. none 模式

  • 特点:容器禁用所有网络,完全隔离,没有网络接口。
  • 适用场景:极少数特殊场景(如仅需本地计算、不需要任何网络通信的容器)。
  • 配置示例
    services:task:image: mytasknetwork_mode: none  # 禁用网络
    

4. container 模式

  • 特点:当前容器共享另一个容器的网络栈(IP、端口等完全复用目标容器的网络)。
  • 通信方式:两个容器共享网络,可通过 localhost 互相访问,无需端口映射。
  • 适用场景:需要让一个容器“寄生”在另一个容器网络中的场景(如辅助工具容器需要访问主容器的内部服务)。
  • 配置示例
    services:main:image: mainapphelper:image: helperappnetwork_mode: "service:main"  # 共享 main 容器的网络
    

5. 自定义网络(推荐用于复杂场景)

  • 特点:通过 networks 配置自定义网络,可指定网络驱动(如 bridgeoverlay 等),实现更灵活的网络隔离和管理。
  • 优势
    • 支持多网络隔离(一个服务可加入多个自定义网络);
    • 比默认 bridge 网络更安全(默认拒绝跨网络通信);
    • 支持 DNS 服务名解析,方便服务间通信。
  • 适用场景:多服务复杂应用(如微服务架构),需要按功能划分网络隔离(如前端、后端、数据库分属不同网络)。
  • 配置示例
    # 定义自定义网络
    networks:frontend:  # 前端网络backend:   # 后端网络services:web:  # 前端服务,加入 frontend 网络image: nginxnetworks:- frontendports:- "80:80"api:  # 后端服务,加入 frontend 和 backend 网络image: myapinetworks:- frontend- backenddb:  # 数据库服务,仅加入 backend 网络(隔离保护)image: mysqlnetworks:- backend
    

总结

  • 简单场景用默认 bridge 模式;
  • 需高性能/主机网络资源用 host 模式;
  • 复杂应用(如微服务)优先用 自定义网络,按功能隔离网络更安全灵活;
  • 特殊隔离需求用 nonecontainer 模式(极少用)。
http://www.lryc.cn/news/611040.html

相关文章:

  • Linux DNS缓存与Nginx DNS缓存运维文档
  • RK3568 Linux驱动学习——字符设备驱动开发
  • 八股——WebSocket
  • 单片机充电的时候电池电压会被拉高,如何检测电压?
  • 三种灰狼算法求解无人机三维路径规划【MATLAB实现】
  • 计算机网络:(十三)传输层(中)用户数据报协议 UDP 与 传输控制协议 TCP 概述
  • 计算机网络:详解路由器如何转发子网数据包
  • DHCP 握手原理
  • Android与Flutter混合开发:页面跳转与通信完整指南
  • PHP获取淘宝商品详情返回参数详解
  • C/C++ 宏中 `do { ... } while (0)` 的“零次循环”技巧
  • 基于Docker的RabbitMQ运行参数设置
  • 【Python办公】图片格式转换GUI工具
  • 2048小游戏
  • Qwen Image:开源中文渲染SOTA,重塑文生图技术边界
  • 计划任务:被忽视的网络与系统安全边界
  • Linux-Day10.系统安全保护web服务管理
  • React在使用create-react-app创建项目慢的解决办法
  • 26-数据仓库与Apache Hive
  • centos通过DockerCompose搭建开源MediaCMS
  • Coze Studio开源,企业用户多了一种选择,也需多几分考量
  • MySQL 中 VARCHAR 和 TEXT 的区别
  • 区分邮科工业交换机与路由器
  • 如何解决pip安装报错ModuleNotFoundError: No module named ‘pytorch-lightning’问题
  • 【图像算法 - 09】基于深度学习的烟雾检测:从算法原理到工程实现,完整实战指南
  • Google AI 发布 MLE-STAR:一款能够自动执行各种 AI 任务的先进机器学习工程代理
  • 《算法导论》第 3 章 - 函数的增长
  • UE5.5使用ControlRig实现MetaHumanNPC看向玩家
  • oelove奥壹新版v11.7旗舰版婚恋系统微信原生小程序源码上架容易遇到的几个坑,避免遗漏参数白屏显示等问题
  • 【开源工具】基于Python的PDF清晰度增强工具全解析(附完整源码)