You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何配置Docker网络实现不同容器网络间的单向访问

Docker单向网络访问配置方案

核心原理

Docker 不同自定义网桥网络之间默认二层隔离,未加入对应网络的容器无法访问该网络内的服务、也无法解析该网络的内部DNS域名。你当前的服务网络归属配置已经符合隔离前提,只需要补全显式的网络声明即可确保规则生效。

修改后的完整docker-compose.yml配置

version: '3.1'

services:
  core-gateway:
    image: boxs-gateway
    networks:
      - core
      - seperated-network
    # 按需添加端口暴露,比如网关对外提供服务的端口
    # ports:
    #   - "80:80"

  core-auth:
    image: boxs-auth
    networks:
      - core
    # 不要对外暴露auth端口,仅允许core网络内的服务访问
    # ports: []

  unsecure-service:
    image: unsecure-image
    networks:
      - seperated-network
    # 按需配置端口暴露,不需要对外暴露的话可以省略
    # ports: []

# 显式声明两个自定义网络,避免默认配置导致意外互通
networks:
  core:
    driver: bridge
    # 不需要核心网络访问外网的话可以开启internal配置,进一步提升安全性
    # internal: true
  seperated-network:
    driver: bridge

效果验证方法

  • 验证boxs-gateway可访问unsecure-service:进入core-gateway容器执行curl unsecure-service:[你的服务端口],能正常返回响应即连通正常
  • 验证unsecure-service无法访问core-auth:进入unsecure-service容器执行ping core-auth或curl core-auth:[auth服务端口],会提示无法解析域名/连接超时,即隔离生效

特殊场景补充配置

如果你的业务场景需要两个网络存在其他互通逻辑,无法通过归属网络做隔离,可以通过宿主机iptables规则强制阻断seperated-network到core网络的访问:

  1. 先查看两个网络的网段:执行docker network inspect core | grep Subnet和docker network inspect seperated-network | grep Subnet获取对应网段,假设core网段为172.20.0.0/16,seperated-network网段为172.21.0.0/16
  2. 添加阻断规则:iptables -I DOCKER-USER -s 172.21.0.0/16 -d 172.20.0.0/16 -j DROP
  3. 保存规则到宿主机配置,避免重启后失效

内容的提问来源于stack exchange,提问作者יהוידע שטינמץ

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 05:42:03