Docker Compose 网络通信

🚀 1. 默认网络(bridge)

每次运行 docker-compose up,Compose 会自动创建一个默认的桥接网络,名称规则是:

<项目目录名>_default

✅ 容器间通信方式

在这个默认网络中,每个服务可以直接通过服务名通信

services:
  backend:
    build: ./backend
    depends_on:
      - db
  db:
    image: postgres

backend 容器中可以通过 db:5432 访问 PostgreSQL。


🧭 2. 自定义网络(推荐)

使用 networks 明确指定网络,可以让多个服务加入同一网络,控制更细:

services:
  web:
    build: ./web
    networks:
      - mynet

  api:
    build: ./api
    networks:
      - mynet

networks:
  mynet:

这样 webapi 可以互相通过服务名通信。


🧱 3. 网络别名(alias)

你可以给某个服务设置多个别名:

services:
  service-a:
    image: myimage
    networks:
      mynet:
        aliases:
          - alias1
          - alias2

networks:
  mynet:

现在其他容器可以通过 service-aalias1alias2 任意名称访问该服务。


🌐 4. 跨 Compose 项目通信

不同的 docker-compose.yml 项目之间,默认是隔离的。如果你希望它们通信,需要:

  • 使用 外部网络
  • 保证网络名称一致

示例:

先创建一个共享网络:

docker network create shared-net

然后两个项目的 Compose 文件中都引用这个网络:

networks:
  default:
    external:
      name: shared-net

这样两个项目中的服务就能互相通信了。


🔍 5. 查看网络信息与调试

查看现有网络:

docker network ls

查看网络详细结构:

docker network inspect myapp_default

查看某个容器的网络连接:

docker inspect <container_id>

🧪 示例:测试网络通信

version: '3.8'
services:
  ping:
    image: alpine
    command: sh -c "apk add curl && curl redis:6379"
    depends_on:
      - redis
    networks:
      - test-net

  redis:
    image: redis
    networks:
      - test-net

networks:
  test-net:

运行后 ping 会尝试连接 redis 服务,通过服务名直接通信。


📌 总结表格

功能类型 描述
默认网络 每个 Compose 项目自动生成 <项目名>_default 网络
服务名通信 Compose 网络中服务可以直接通过服务名访问
自定义网络 使用 networks 指定网络,支持多个服务连接相同网络
外部网络 允许多个 Compose 项目通信,需事先 docker network create
网络别名 为服务添加多个访问名称
posted @ 2025-04-25 10:58  槑孒  阅读(191)  评论(0)    收藏  举报