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

