我有以下环境:
- 后端带有Sping Boot 应用程序的Docker容器
- 具有用于认证的密钥罩的码头集装箱
- 两个集装箱在同一个定制码头桥网络中
- 主机上的前端应用程序
因此,后端应用程序具有env KEYCLOAK_URL,它用于两个应用程序(前端和后端),并且此URL在主机(浏览器中)上不可用,因为URL具有码头桥内部IP
当用户访问前端应用程序时,前端应用程序向后端发出getUser请求,并返回keyCloak auth URL,以便从env KEYCLOAK_URL登录,但无法从浏览器访问此URL
有人有经验或建议如何解决这个问题吗?
docker-compose.yml
version: '3.7'
networks:
net:
driver: bridge
external: false
name: test-net
services:
postgres-db:
image: postgres:13.1
container_name: postgres-db
networks:
- net
ports:
- 5432:5432
volumes:
- ./init-postgresql.sql:/docker-entrypoint-initdb.d/1-init.sql:ro
- ./postgres-data:/var/lib/postgresql/data:rw
environment:
LC_ALL: 'C.UTF-8'
POSTGRES_USER: postgres
POSTGRES_PASSWORD: postgres
POSTGRES_HOST: postgres-db
POSTGRES_DB: postgres
PGDATA: /var/lib/postgresql/data
restart: unless-stopped
keycloak:
image: quay.io/keycloak/keycloak:11.0.2
container_name: keycloak
hostname: keycloak
command: -Dkeycloak.profile.feature.upload_scripts=enabled
networks:
- net
ports:
- 8180:8080
environment:
KEYCLOAK_USER: admin
KEYCLOAK_PASSWORD: admin
DB_VENDOR: POSTGRES
DB_ADDR: postgres-db
DB_USER: postgres
DB_PASSWORD: postgres
DB_DATABASE: keycloak
DB_SCHEMA: public
depends_on:
- postgres-db
restart: unless-stopped
app:
image: app
container_name: app
depends_on:
- keycloak
networks:
- net
ports:
- 8083:8083
environment:
KEYCLOAK_URL: http://keycloak:8080/auth
restart: unless-stopped
我尝试了另一个选项,将spring Boot 应用程序传输到Docker主机网络并将KEYCLOAK_URL更改为localhost:8180,但Windows Docker Desktop不支持主机联网
1条答案
按热度按时间aiazj4mn1#
有两个选项
1:将keycloak url设置为公共,并使用keycloak内部登录表单和登录流
2:在前端构建自己的登录表单,并将后端与keycloak rest API连接,用于登录、令牌、角色等。