Docker Compose 中指定网络的配置方法

学习笔记作者:admin日期:2025-06-29点击:7

摘要:本文介绍了如何在 Docker Compose 配置中为服务指定自定义网络,包括定义桥接网络、分配服务到网络以及可选的子网配置。通过这种方式,可以实现容器之间的安全通信和网络隔离。

1. 问题描述

      用户希望在 Docker Compose 配置中指定网络,以便更好地管理容器间的通信和网络隔离。

2. 解决方案

      在 Docker Compose 中,可以通过 networks 字段为服务分配自定义网络。以下是一个完整的示例,展示了如何定义一个名为 bitmagnet_network 的桥接网络,并将 bitmagnetpostgres 容器加入该网络。

version: '3.8'

services:
  bitmagnet:
    image: ghcr.io/bitmagnet-io/bitmagnet:latest
    container_name: bitmagnet
    ports:
      - "3333:3333"
      - "3334:3334/tcp"
      - "3334:3334/udp"
    restart: unless-stopped
    environment:
      - POSTGRES_HOST=postgres
      - POSTGRES_PASSWORD=pNost9gK6gres
      - TMDB_API_KEY=398f82347b713c19d22d43a913bb4fbd
    volumes:
      - /root/dockerdata/bitmagnet:/root/.config/bitmagnet
    command:
      - worker
      - run
      - --keys=http_server
      - --keys=queue_server
      - --keys=dht_crawler
    depends_on:
      postgres:
        condition: service_healthy
    networks:
      - bitmagnet_network

  postgres:
    image: postgres:16-alpine
    container_name: bitmagnet-postgres
    volumes:
      - /root/dockerdata/postgres:/var/lib/postgresql/data
    ports:
      - "5432:5432"
    restart: unless-stopped
    environment:
      - POSTGRES_PASSWORD=pNost9gK6gres
      - POSTGRES_DB=bitmagnet
      - PGUSER=postgres
    shm_size: 5g
    healthcheck:
      test:
        - CMD-SHELL
        - pg_isready
      start_period: 20s
      interval: 10s
    networks:
      - bitmagnet_network

networks:
  bitmagnet_network:
    driver: bridge

3. 关键说明

  • networks: 块用于定义一个名为 bitmagnet_network 的桥接网络。
  • networks: 在每个服务下指定使用的网络名称,以确保容器加入该网络。
  • 这样配置后:
    • bitmagnet 可以通过主机名 postgres 访问 PostgreSQL 容器(因为它们在同一个自定义网络中)。
    • 网络通信更加安全和高效。
  • 如果需要,还可以配置子网、固定 IP 等高级功能。

4. 自定义子网(可选)

      如果你希望为网络设置特定的子网和网关,可以这样写:

networks:
  bitmagnet_network:
    driver: bridge
    ipam:
      config:
        - subnet: 172.20.0.0/24
          gateway: 172.20.0.1

      注意:使用自定义子网时,请确保没有与其他网络冲突。

5. 总结

      要指定网络,只需:

  1. 在顶层添加 networks: 块定义网络;
  2. 在服务下用 networks: 指定使用的网络名称。

      如果你还有其他需求,比如多个网络、固定 IP、外部网络接入等,也可以继续扩展这个配置。

上一篇      下一篇