如何结合BFF模板正确配置docker-compose keycloak?

问题描述 投票:0回答:1

我正在根据

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 docker-compose spring-security oauth-2.0 keycloak
1个回答
0
投票

在 docker 容器中,

localhost
代表容器本身,而不是主机。

您可以将以下内容添加到您的撰写文件中:

services:
    extra_hosts:
    - "host.docker.internal:host-gateway"

这将向容器的

hosts
文件添加一个条目。然后,您可以使用
host.docker.internal
作为主机名来引用 Docker 公开公开的其他服务。

© www.soinside.com 2019 - 2024. All rights reserved.