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

如何让Docker网络内的bar容器对宿主机不可达?

解决方案

你的核心问题是对Docker网络的internal配置理解有误——你把IPAM驱动设为internal是错误的,Docker中标记网络为隔离宿主机的内部网络,需要使用internal: true字段,而非IPAM驱动配置。

要实现bar容器对宿主机完全不可达,同时保留foo与宿主机的通信、以及foo和bar之间的通信,我们需要拆分网络:

  • 一个桥接网络:用于foo和宿主机通信,支持端口映射;
  • 一个内部网络:用于foo和bar通信,完全隔离宿主机。

修改后的docker-compose.yaml如下:

version: "3.8"

services:
  foo:
    ports:
      - 5000:5000/tcp
    networks:
      - public_bridge
      - private_internal
    # 保留你原有的其他配置...

  bar:
    networks:
      - private_internal
    # 保留你原有的其他配置...

networks:
  public_bridge:
    # 默认桥接网络,宿主机可接入,支持端口映射
    ipam:
      config:
        - subnet: 172.100.0.0/16
  private_internal:
    # 内部网络,宿主机不会接入,容器仅能与同网络内的容器通信
    internal: true
    ipam:
      config:
        - subnet: 172.200.0.0/16

配置说明

  • public_bridge:默认桥接网络类型,宿主机生成对应网络接口,foo通过此网络实现与宿主机的端口映射;
  • private_internal:通过internal: true标记为内部网络,宿主机不会接入该网络,bar仅加入此网络,因此无法与宿主机产生任何网络交互;
  • foo同时加入两个网络,既可以和宿主机通信,也能和bar正常交互。

内容的提问来源于stack exchange,提问作者Daniel Walker

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 06:10:30