全部学科
Python全栈
python
NodeJS全栈
nodejs
小程序首页
📅 2026-05-21 5 分钟 ✍️ juanwangdev

Compose 网络与卷

Compose 中网络和卷是多容器通信与数据共享的基础,下面介绍配置方法。

网络配置

默认网络

YAML
services:
  web:
    image: nginx
  app:
    image: my-app

默认所有服务加入 default 网络,可互相访问。

自定义网络

YAML
version: '3.8'

services:
  web:
    image: nginx
    networks:
      - frontend
  
  app:
    image: my-app
    networks:
      - frontend
      - backend
  
  db:
    image: postgres
    networks:
      - backend  # 仅 app 可访问 db

networks:
  frontend:
  backend:

网络驱动

YAML
networks:
  frontend:
    driver: bridge  # 默认
  
  overlay-net:
    driver: overlay  # Swarm 跨主机

网络别名

YAML
services:
  db:
    image: postgres
    networks:
      backend:
        aliases:
          - database
          - postgres-db

# app 可通过 database、postgres-db 访问

数据卷配置

命名卷

YAML
version: '3.8'

services:
  db:
    image: postgres
    volumes:
      - db-data:/var/lib/postgresql/data

volumes:
  db-data:
    driver: local

外部卷

YAML
volumes:
  db-data:
    external: true  # 使用已存在的卷

卷驱动选项

YAML
volumes:
  cache-data:
    driver: local
    driver_opts:
      type: tmpfs
      device: tmpfs
      o: size=100m

完整示例

YAML
version: '3.8'

services:
  nginx:
    image: nginx:alpine
    ports:
      - "80:80"
    networks:
      - frontend
    volumes:
      - nginx-config:/etc/nginx/conf.d:ro

  app:
    build: .
    networks:
      - frontend
      - backend
    volumes:
      - app-data:/app/data
    depends_on:
      - db
      - redis

  db:
    image: postgres:15
    networks:
      - backend
    volumes:
      - db-data:/var/lib/postgresql/data

  redis:
    image: redis:7
    networks:
      - backend
    volumes:
      - redis-data:/data

networks:
  frontend:
    driver: bridge
  backend:
    driver: bridge
    internal: true  # 禁止外部访问

volumes:
  nginx-config:
  app-data:
  db-data:
  redis-data:

网络隔离

YAML
networks:
  backend:
    internal: true  # 无外网访问
  frontend:
    # 可访问外网

internal: true 阻止网络访问外部,仅允许内部通信。

查看网络与卷

Bash
# 查看网络
docker compose config --networks

# 查看卷
docker compose config --volumes

# 查看容器网络
docker inspect my-app-web-1 | grep -A 10 "Networks"

要点总结

  • 默认所有服务加入同一网络可互相访问
  • 自定义网络实现服务隔离,仅同一网络服务可通信
  • 网络别名提供服务发现别名,提高配置灵活性
  • 命名卷实现数据持久化,外部卷使用已有数据
  • internal: true 阻止网络访问外部,增强安全性

📝 发现内容有误?点击此处直接编辑

← 上一篇 多阶段构建优化
下一篇 → docker-compose.yml 语法
想查看更多题目和详细解析?
小程序提供完整的题库、模拟考试和详细解析
马上就来

长按或扫描二维码,立即体验

扫码体验小程序
马上就来
使用微信扫描二维码
立即体验完整题库