Spring Boot Keycloak docker-compose

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

当 Docker 容器中的 Spring Boot 应用程序尝试访问 Keycloak Docker 容器时,我遇到问题。我使用 docker-compose 创建了它们。以下是文件:

version: "3.8"

services:
  psql-db:
    image: postgres
    container_name: psql-db
    restart: always
    environment:
      - POSTGRES_USER=postgres
      - POSTGRES_PASSWORD=xxx
      - POSTGRES_DB=postgres
    ports:
      - '5432:5432'

  remind-me:
    container_name: remind-me-app
    build:
      context: .
      dockerfile: Dockerfile
    ports:
      - '8080:8080'
    environment:
      - SPRING_DATASOURCE_URL=jdbc:postgresql://psql-db:5432/postgres
      - SPRING_DATASOURCE_USERNAME=postgres
      - SPRING_DATASOURCE_PASSWORD=xxx
      - KEYCLOAK_URL=http://keycloak-prod:8989/realms/remind-me
    depends_on:
      - psql-db

  keycloak-prod:
    image: quay.io/keycloak/keycloak:24.0.2
    container_name: keycloak-prod
    hostname: keycloak-prod
    environment:
      - KEYCLOAK_ADMIN=admin
      - KEYCLOAK_ADMIN_PASSWORD=xxx
    command: start-dev
    ports:
      - '8989:8080'
Spring Boot 应用程序中的

applrication.properties 文件:

spring.application.name=remind-me
server.port=8080

spring.datasource.url=jdbc:postgresql://localhost:5432/postgres
spring.datasource.username=postgres
spring.datasource.password=xxx

spring.jpa.hibernate.ddl-auto=validate
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect
spring.jpa.show-sql=true
spring.jpa.defer-datasource-initialization=false
spring.sql.init.mode=always

spring.jpa.properties.hibernate.format_sql=true
logging.level.org.hibernate.orm.jdbc.bind=TRACE

schedule.frequency=0 0 9 * * *

#John Remindme
spring.mail.host=xxx
spring.mail.port=587
spring.mail.username=xxx
spring.mail.password=xxx
spring.mail.properties.mail.smtp.auth=true
spring.mail.properties.mail.smtp.starttls.enable=true

#keycloak
spring.security.oauth2.resourceserver.jwt.issuer-uri=${KEYCLOAK_URL}
spring.security.oauth2.resourceserver.jwt.jwk-set-uri=${KEYCLOAK_URL}/protocol/openid-connect/certs
jwt.auth.converter.resource-id=remind-me
jwt.auth.converter.principal-attribute=preferred_username

#flyway
spring.flyway.baseline-on-migrate=true
spring.flyway.baseline-version=0

#ehcache, second level cache
spring.cache.jcache.config=classpath:ehcache.xml

我得到的错误是:

Caused by: org.springframework.web.client.ResourceAccessException: I/O error on GET request for "http://keycloak-prod:8989/realms/remind-me/protocol/openid-connect/certs": Connection refused

我可以通过本地主机上的浏览器连接到 Keycloak。我还通过邮递员连接到它并获取令牌。然而docker中的spring boot应用程序抛出错误。

谢谢!

spring-boot docker docker-compose keycloak
1个回答
0
投票

尝试使用容器的静态IP,我遇到了类似的问题,这是由于执行上下文造成的,因为容器可能位于网络之外,你必须直接指向它,至少对于开发来说,在Windows中你可以使用“ ipconfig”查看虚拟机的ip

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