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

Docker Compose配置容器网络:Keycloak仅允许Web容器访问

Docker Compose 实现容器网络访问控制方案

需求梳理

  • 运行Flask应用的Web容器对外暴露5000端口,需支持虚拟机本地、宿主机、外部物理设备三类访问来源
  • Keycloak容器仅允许被Web容器访问,禁止其他所有来源直接访问
    目标网络结构示意图

当前配置问题

现有配置中给Keycloak添加了8080:8080的端口映射规则,会直接将Keycloak服务暴露到宿主机所有网卡,外部可直接访问,不符合访问限制要求。

正确配置实现

核心逻辑:利用Docker自定义桥接网络的默认隔离能力,同网络内容器可通过服务名互访,未做宿主机端口映射的服务不会对外暴露。
完整可用配置如下:

version: '3.8'
services:
  web:
    build: .
    ports:
      - '0.0.0.0:5000:5000'
    volumes:
      - .:/app
    depends_on:
      - keycloak
    networks:
      - app-private
  keycloak:
    container_name: keycloak
    image: jboss/keycloak:13.0.1
    environment:
      KEYCLOAK_USER: admin
      KEYCLOAK_PASSWORD: admin
    networks:
      - app-private

networks:
  app-private:
    driver: bridge

配置说明

  • Web服务端口绑定0.0.0.0:5000:5000会将服务映射到宿主机所有网卡,虚拟机本地访问127.0.0.1:5000、宿主机访问虚拟机IP:5000、同网段外部物理设备访问虚拟机IP:5000均可正常连通。
  • Keycloak服务删除了所有端口映射配置,其8080端口仅对加入app-private网络的容器开放,外部所有来源(宿主机、其他物理设备、未加入该网络的其他容器)都无法直接访问Keycloak。
  • Web容器访问Keycloak时,直接使用服务名作为域名即可,地址格式为http://keycloak:8080,不要使用localhost或宿主机IP,否则会出现连接失败问题。

临时需要登录Keycloak管理后台时,不需要临时加端口映射,可以通过docker exec进入Web容器做端口转发,或者启动一个临时调试容器加入app-private网络访问,不影响日常运行的访问控制规则。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 14:06:30