Windows容器实现类似internal:true的网络配置方案求助
问题
需要在docker-compose.yml中配置两个基于Windows镜像的服务:
- frontend:Nginx服务,需能访问互联网,同时与backend通信
- backend:ASP.NET应用,仅允许与frontend通信,不能访问互联网
但Windows容器不支持Linux容器常用的internal: true网络属性及bridge网络驱动,尝试l2bridge等驱动未成功,求可行配置方案。
以下为Linux容器可用但Windows容器无法运行的配置代码:
version: "3.8" services: frontend: build: "./proxy" depends_on: - backend ports: - "8080:4000" networks: - internal_network - out_network backend: build: "./webapp" expose: - "80" networks: - internal_network networks: internal_network: internal: true out_network: {}
可行配置方案
Windows容器的网络模型和Linux不一样,我们可以通过创建两个nat类型网络(Windows容器默认支持),结合网关配置实现需求:一个用于内部专属通信,一个用于互联网访问。
完整配置代码
version: "3.8" services: frontend: build: "./proxy" depends_on: - backend ports: - "8080:4000" # 同时挂载内部和外部网络,兼顾通信与上网需求 networks: - internal_only - external_access backend: build: "./webapp" expose: - "80" # 仅挂载内部网络,无网关无法访问互联网 networks: - internal_only networks: internal_only: driver: nat ipam: config: - subnet: 192.168.200.0/24 gateway: "" # 空网关配置,彻底阻断此网络容器的外部访问 external_access: driver: nat ipam: config: - subnet: 192.168.201.0/24 # 留空网关会自动使用宿主机默认网关,实现互联网访问
配置说明
internal_only网络:用nat驱动,通过空网关设置,让挂载它的backend容器只能和同网络的frontend通信,完全无法访问互联网。external_access网络:同样用nat驱动,自动使用宿主机默认网关,让frontend能正常访问互联网,同时通过挂载internal_only网络和backend互通。- 两个网络用不同子网,避免IP冲突,保证隔离效果。
内容的提问来源于stack exchange,提问作者nguyendt
相关产品推荐
相关产品推荐

