如何让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
相关产品推荐
相关产品推荐

