我正在根据
spring-addons提供的
Vue.js
教程使用 Spring Boot
和 BFF
开发一个网站(SPA)。
在某些时候我需要优化开发过程,我得出的结论是反向代理服务器(bff网关)在开发过程中不会经常改变,是时候停止从IDEA手动运行它了。因此,需要将其打包成
docker image
并通过docker-compose
与其他服务(keycloak和postgresql)一起运行。尝试这样做时,我遇到了一些我不知道如何解决的问题。
从
bff-gateway
启动 docker
并尝试登录 keycloak
时,按照教程的预期,会向 http://localhost:8080/oauth2/authorization/keycloak
发出请求
对请求的响应是 304 重定向到位置:
http://keycloak:9090/realms/...
,这会导致“无法访问该站点”
我应该如何正确配置它才能正常工作?
docker-compose.yaml
:
services:
gateway:
image: 'bff-gateway:0.0.1-SNAPSHOT'
container_name: 'bff'
environment:
SPRING_PROFILES_ACTIVE: 'prod-docker'
networks:
- 'keycloak-network'
ports:
- '8080:8080'
depends_on:
keycloak:
condition: 'service_healthy'
postgres:
image: 'postgres:latest'
container_name: 'postgres-db'
restart: 'always'
volumes:
- postgres_data:/var/lib/postgresql/data
environment:
POSTGRES_DB: 'keycloakdb'
POSTGRES_USER: 'keycloakuser'
POSTGRES_PASSWORD: 'keycloakpass'
networks:
- 'keycloak-network'
healthcheck:
test: pg_isready -U keycloakuser -d keycloakdb
interval: 10s
timeout: 3s
retries: 3
start_period: 5s
keycloak:
container_name: 'keycloak'
image: quay.io/keycloak/keycloak:23.0.4
restart: 'always'
volumes:
- keycloak_data:/opt/keycloak/data/
environment:
KC_HEALTH_ENABLED: true
DB_VENDOR: 'POSTGRES'
DB_ADDR: 'postgres'
DB_DATABASE: 'keycloakdb'
DB_SCHEMA: 'public'
KEYCLOAK_USER: 'user'
KEYCLOAK_PASSWORD: 'user'
KEYCLOAK_ADMIN: 'admin'
KEYCLOAK_ADMIN_PASSWORD: 'admin'
ports:
- "9090:9090"
command:
- "start-dev"
- "--http-port=9090"
networks:
- 'keycloak-network'
depends_on:
postgres:
condition: 'service_healthy'
healthcheck:
# I have not found another way to do this, if you know, then please help: https://devops.stackexchange.com/q/18923/43435
test: [ 'CMD-SHELL', '[ -f /tmp/HealthCheck.java ] || echo "public class HealthCheck { public static void main(String[] args) throws java.lang.Throwable { System.exit(java.net.HttpURLConnection.HTTP_OK == ((java.net.HttpURLConnection) java.net.URI.create(args[0]).toURL().openConnection()).getResponseCode() ? 0 : 1); } }" > /tmp/HealthCheck.java && java /tmp/HealthCheck.java http://localhost:9090/health/live' ]
start_period: 10s
interval: 15s
retries: 3
timeout: 5s
networks:
keycloak-network:
driver: 'bridge'
volumes:
postgres_data:
driver: 'local'
keycloak_data:
driver: 'local'
bff-网关
prod-docker
简介:
issuer: http://keycloak:9090/realms/realm-id
# At the time of development, the common frontend and backend application is launched from IDEA
backend-api-uri: ${scheme}://host.docker.internal:8090/api
ui-uri: ${scheme}://host.docker.internal:1000
bff-gateway 的基本配置对应教程。
在 docker 容器中,
localhost
代表容器本身,而不是主机。
您可以将以下内容添加到您的撰写文件中:
services:
extra_hosts:
- "host.docker.internal:host-gateway"
这将向容器的
hosts
文件添加一个条目。然后,您可以使用 host.docker.internal
作为主机名来引用 Docker 公开公开的其他服务。