Keycloak Docker Compose

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

我一直在尝试学习 Docker,特别是为我的家庭网络学习 Docker Compose。我已经能够成功部署许多其他容器,但我仍在学习/实验。我最近的项目是尝试创建一个 Keycloak 容器,但我一直在努力解决我的数据库连接问题。

我一直在调整在容器中运行 Keycloak 中找到的说明,并找到了 Docker Compose 配置的示例。这是到目前为止我的 Docker Compose 文件的内容:

version: '3.6'

services:
  keycloak_web:
    image: quay.io/keycloak/keycloak:23.0.2
    container_name: keycloak_web
    environment:
      KC_DB: postgres
      KC_DB_URL: jdbc:postgresql://keycloakdb:5432/keycloak
      KC_DB_USERNAME: keycloak
      KC_DB_PASSWORD: keycloak

      KC_HOSTNAME: localhost
      KC_HOSTNAME_PORT: 8080
      KC_HOSTNAME_STRICT: 'false'
      KC_HOSTNAME_STRICT_HTTPS: 'false'

      KC_LOG_LEVEL: info
      KC_METRICS_ENABLED: 'true'
      KC_HEALTH_ENABLED: 'true'
    command: start-dev
    depends_on:
      - keycloakdb
    ports:
      - '8080:8080'


  keycloakdb:
    image: postgres:16
    volumes:
      - postgres_data:/var/lib/postgresql/data
    environment:
      POSTGRES_DB: keycloak
      POSTGRES_USER: keycloak
      POSTGRES_PASSWORD: keycloak

volumes:
  postgres_data:

当我尝试使容器联机时,我收到以下错误(表示数据库连接错误):

Starting data_keycloakdb_1 ... done
Recreating keycloak_web    ... done
Attaching to keycloak_web
keycloak_web     | Updating the configuration and installing your custom providers, if any. Please wait.
keycloak_web     | 2024-02-28 01:05:44,993 INFO  [io.quarkus.deployment.QuarkusAugmentor] (main) Quarkus augmentation completed in 11051ms
keycloak_web     | 2024-02-28 01:05:47,100 INFO  [org.keycloak.quarkus.runtime.hostname.DefaultHostnameProvider] (main) Hostname settings: Base URL: <unset>, Hostname: localhost, Strict HTTPS: false, Path: <request>, Strict BackChannel: false, Admin URL: <unset>, Admin: <request>, Port: 8080, Proxied: false
keycloak_web     | 2024-02-28 01:05:49,123 WARN  [io.quarkus.agroal.runtime.DataSources] (main) Datasource <default> enables XA but transaction recovery is not enabled. Please enable transaction recovery by setting quarkus.transaction-manager.enable-recovery=true, otherwise data may be lost if the application is terminated abruptly
keycloak_web     | 2024-02-28 01:05:49,293 WARN  [org.infinispan.PERSISTENCE] (keycloak-cache-init) ISPN000554: jboss-marshalling is deprecated and planned for removal
keycloak_web     | 2024-02-28 01:05:49,350 WARN  [org.infinispan.CONFIG] (keycloak-cache-init) ISPN000569: Unable to persist Infinispan internal caches as no global state enabled
keycloak_web     | 2024-02-28 01:05:49,455 INFO  [org.infinispan.CONTAINER] (keycloak-cache-init) ISPN000556: Starting user marshaller 'org.infinispan.jboss.marshalling.core.JBossUserMarshaller'
keycloak_web     | 2024-02-28 01:05:49,470 WARN  [io.agroal.pool] (agroal-11) Datasource '<default>': The connection attempt failed.
keycloak_web     | 2024-02-28 01:05:49,472 WARN  [org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator] (JPA Startup Thread) HHH000342: Could not obtain connection to query metadata: java.lang.NullPointerException: Cannot invoke "org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(java.sql.SQLException, String)" because the return value of "org.hibernate.resource.transaction.backend.jta.internal.JtaIsolationDelegate.sqlExceptionHelper()" is null
keycloak_web     |      at org.hibernate.resource.transaction.backend.jta.internal.JtaIsolationDelegate.doTheWork(JtaIsolationDelegate.java:186)
keycloak_web     |      at org.hibernate.resource.transaction.backend.jta.internal.JtaIsolationDelegate.lambda$delegateWork$1(JtaIsolationDelegate.java:75)
keycloak_web     |      at org.hibernate.resource.transaction.backend.jta.internal.JtaIsolationDelegate.doInSuspendedTransaction(JtaIsolationDelegate.java:107)
keycloak_web     |      at org.hibernate.resource.transaction.backend.jta.internal.JtaIsolationDelegate.delegateWork(JtaIsolationDelegate.java:72)
keycloak_web     |      at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.getJdbcEnvironmentUsingJdbcMetadata(JdbcEnvironmentInitiator.java:279)
keycloak_web     |      at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:193)
keycloak_web     |      at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:69)
keycloak_web     |      at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:119)
keycloak_web     |      at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:264)
keycloak_web     |      at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:239)
keycloak_web     |      at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:216)
keycloak_web     |      at org.hibernate.engine.jdbc.internal.JdbcServicesImpl.configure(JdbcServicesImpl.java:52)
keycloak_web     |      at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.configureService(StandardServiceRegistryImpl.java:125)
keycloak_web     |      at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:248)
keycloak_web     |      at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:216)
keycloak_web     |      at org.hibernate.boot.internal.SessionFactoryOptionsBuilder.<init>(SessionFactoryOptionsBuilder.java:273)
keycloak_web     |      at io.quarkus.hibernate.orm.runtime.recording.PrevalidatedQuarkusMetadata.buildSessionFactoryOptionsBuilder(PrevalidatedQuarkusMetadata.java:70)
keycloak_web     |      at io.quarkus.hibernate.orm.runtime.boot.FastBootEntityManagerFactoryBuilder.build(FastBootEntityManagerFactoryBuilder.java:81)
keycloak_web     |      at io.quarkus.hibernate.orm.runtime.FastBootHibernatePersistenceProvider.createEntityManagerFactory(FastBootHibernatePersistenceProvider.java:74)
keycloak_web     |      at jakarta.persistence.Persistence.createEntityManagerFactory(Persistence.java:80)
keycloak_web     |      at jakarta.persistence.Persistence.createEntityManagerFactory(Persistence.java:55)
keycloak_web     |      at io.quarkus.hibernate.orm.runtime.JPAConfig$LazyPersistenceUnit.get(JPAConfig.java:156)
keycloak_web     |      at io.quarkus.hibernate.orm.runtime.JPAConfig$1.run(JPAConfig.java:64)
keycloak_web     |      at java.base/java.lang.Thread.run(Thread.java:840)
keycloak_web     |
keycloak_web     | 2024-02-28 01:05:50,519 INFO  [org.keycloak.connections.infinispan.DefaultInfinispanConnectionProviderFactory] (main) Node name: node_227989, Site name: null
keycloak_web     | 2024-02-28 01:05:50,522 INFO  [org.keycloak.broker.provider.AbstractIdentityProviderMapper] (main) Registering class org.keycloak.broker.provider.mappersync.ConfigSyncEventListener
keycloak_web     | 2024-02-28 01:05:50,530 WARN  [io.agroal.pool] (agroal-11) Datasource '<default>': The connection attempt failed.
keycloak_web     | 2024-02-28 01:05:50,572 ERROR [org.keycloak.quarkus.runtime.cli.ExecutionExceptionHandler] (main) ERROR: Failed to start server in (development) mode
keycloak_web     | 2024-02-28 01:05:50,572 ERROR [org.keycloak.quarkus.runtime.cli.ExecutionExceptionHandler] (main) ERROR: Failed to obtain JDBC connection
keycloak_web     | 2024-02-28 01:05:50,572 ERROR [org.keycloak.quarkus.runtime.cli.ExecutionExceptionHandler] (main) ERROR: The connection attempt failed.
keycloak_web     | 2024-02-28 01:05:50,572 ERROR [org.keycloak.quarkus.runtime.cli.ExecutionExceptionHandler] (main) ERROR: keycloakdb
keycloak_web     | 2024-02-28 01:05:50,573 ERROR [org.keycloak.quarkus.runtime.cli.ExecutionExceptionHandler] (main) For more details run the same command passing the '--verbose' option. Also you can use '--help' to see the details about the usage of the particular command.

此外,我还尝试了 Docker 网络、数据库 URL 设置的一系列不同迭代,并且我已更改 KC_DB_URL 以明确突破 KC_DB_HOSTNAME、KC_DB_PORT 等。

任何正确方向的帮助或指示将不胜感激。预先感谢您。

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

postgres
版本很重要
KC_DB_USERNAME
KC_DB_PASSWORD
不能使用相同的字符串。

这个

docker-compose.yml
文件可以工作

version: '3.6'

services:
  keycloak_web:
    image: quay.io/keycloak/keycloak:23.0.7
    container_name: keycloak_web
    environment:
      KC_DB: postgres
      KC_DB_URL: jdbc:postgresql://keycloakdb:5432/keycloak
      KC_DB_USERNAME: keycloak
      KC_DB_PASSWORD: password

      KC_HOSTNAME: localhost
      KC_HOSTNAME_PORT: 8080
      KC_HOSTNAME_STRICT: false
      KC_HOSTNAME_STRICT_HTTPS: false

      KC_LOG_LEVEL: info
      KC_METRICS_ENABLED: true
      KC_HEALTH_ENABLED: true
      KEYCLOAK_ADMIN: admin
      KEYCLOAK_ADMIN_PASSWORD: admin
    command: start-dev
    depends_on:
      - keycloakdb
    ports:
      - 8080:8080

  keycloakdb:
    image: postgres:15
    volumes:
      - postgres_data:/var/lib/postgresql/data
    environment:
      POSTGRES_DB: keycloak
      POSTGRES_USER: keycloak
      POSTGRES_PASSWORD: password

volumes:
  postgres_data:

记录

Attaching to keycloakdb-1, keycloak_web
keycloakdb-1  | 
keycloakdb-1  | PostgreSQL Database directory appears to contain a database; Skipping initialization
keycloakdb-1  |
keycloakdb-1  | 2024-02-28 03:48:28.026 UTC [1] LOG:  starting PostgreSQL 15.6 (Debian 15.6-1.pgdg120+2) on x86_64-pc-linux-gnu, compiled by gcc (Debian 12.2.0-14) 12.2.0, 64-bit
keycloakdb-1  | 2024-02-28 03:48:28.027 UTC [1] LOG:  listening on IPv4 address "0.0.0.0", port 5432
keycloakdb-1  | 2024-02-28 03:48:28.027 UTC [1] LOG:  listening on IPv6 address "::", port 5432
keycloakdb-1  | 2024-02-28 03:48:28.042 UTC [1] LOG:  listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"
keycloakdb-1  | 2024-02-28 03:48:28.058 UTC [29] LOG:  database system was interrupted; last known up at 2024-02-28 03:48:01 UTC
keycloak_web  | Updating the configuration and installing your custom providers, if any. Please wait.
keycloakdb-1  | 2024-02-28 03:48:29.325 UTC [29] LOG:  database system was not properly shut down; automatic recovery in progress
keycloakdb-1  | 2024-02-28 03:48:29.330 UTC [29] LOG:  invalid record length at 0/1D580F0: wanted 24, got 0
keycloakdb-1  | 2024-02-28 03:48:29.330 UTC [29] LOG:  redo is not required
keycloakdb-1  | 2024-02-28 03:48:29.341 UTC [27] LOG:  checkpoint starting: end-of-recovery immediate wait
keycloakdb-1  | 2024-02-28 03:48:29.381 UTC [27] LOG:  checkpoint complete: wrote 3 buffers (0.0%); 0 WAL file(s) added, 0 removed, 0 recycled; write=0.010 s, sync=0.011 s, total=0.045 s; sync files=2, longest=0.007 s, average=0.006 s; distance=0 kB, estimate=0 kB
keycloakdb-1  | 2024-02-28 03:48:29.388 UTC [1] LOG:  database system is ready to accept connections
keycloak_web  | 2024-02-28 03:48:36,877 INFO  [io.quarkus.deployment.QuarkusAugmentor] (main) Quarkus augmentation completed in 7132ms
keycloak_web  | 2024-02-28 03:48:38,000 INFO  [org.keycloak.quarkus.runtime.hostname.DefaultHostnameProvider] (main) Hostname settings: Base URL: <unset>, Hostname: localhost, Strict HTTPS: false, Path: <request>, Strict BackChannel: false, Admin URL: <unset>, Admin: <request>, Port: 8080, Proxied: false
keycloak_web  | 2024-02-28 03:48:39,079 WARN  [io.quarkus.agroal.runtime.DataSources] (main) Datasource <default> enables XA but transaction recovery is not enabled. Please enable transaction recovery by setting quarkus.transaction-manager.enable-recovery=true, otherwise data may be lost if the application is terminated abruptly
keycloakdb-1  | 2024-02-28 03:48:39.232 UTC [33] WARNING:  database "keycloak" has a collation version mismatch
keycloakdb-1  | 2024-02-28 03:48:39.232 UTC [33] DETAIL:  The database was created using collation version 2.31, but the operating system provides version 2.36.
keycloakdb-1  | 2024-02-28 03:48:39.232 UTC [33] HINT:  Rebuild all objects in this database that use the default collation and run ALTER DATABASE keycloak REFRESH COLLATION VERSION, or build PostgreSQL with the right library version.
keycloak_web  | 2024-02-28 03:48:39,423 WARN  [org.infinispan.PERSISTENCE] (keycloak-cache-init) ISPN000554: jboss-marshalling is deprecated and planned for removal
keycloak_web  | 2024-02-28 03:48:39,475 WARN  [org.infinispan.CONFIG] (keycloak-cache-init) ISPN000569: Unable to persist Infinispan internal caches as no global state enabled
keycloak_web  | 2024-02-28 03:48:39,538 INFO  [org.infinispan.CONTAINER] (keycloak-cache-init) ISPN000556: Starting user marshaller 'org.infinispan.jboss.marshalling.core.JBossUserMarshaller'
keycloak_web  | 2024-02-28 03:48:39,922 INFO  [org.keycloak.broker.provider.AbstractIdentityProviderMapper] (main) Registering class org.keycloak.broker.provider.mappersync.ConfigSyncEventListener
keycloak_web  | 2024-02-28 03:48:40,184 INFO  [org.keycloak.connections.infinispan.DefaultInfinispanConnectionProviderFactory] (main) Node name: node_838099, Site name: null
keycloakdb-1  | 2024-02-28 03:48:40.393 UTC [34] WARNING:  database "keycloak" has a collation version mismatch
keycloakdb-1  | 2024-02-28 03:48:40.393 UTC [34] DETAIL:  The database was created using collation version 2.31, but the operating system provides version 2.36.
keycloakdb-1  | 2024-02-28 03:48:40.393 UTC [34] HINT:  Rebuild all objects in this database that use the default collation and run ALTER DATABASE keycloak REFRESH COLLATION VERSION, or build PostgreSQL with the right library version.
keycloak_web  | 2024-02-28 03:48:40,813 INFO  [io.quarkus] (main) Keycloak 23.0.7 on JVM (powered by Quarkus 3.2.10.Final) started in 3.856s. Listening on: http://0.0.0.0:8080
keycloak_web  | 2024-02-28 03:48:40,813 INFO  [io.quarkus] (main) Profile dev activated.
keycloak_web  | 2024-02-28 03:48:40,813 INFO  [io.quarkus] (main) Installed features: [agroal, cdi, hibernate-orm, jdbc-h2, jdbc-mariadb, jdbc-mssql, jdbc-mysql, jdbc-oracle, jdbc-postgresql, keycloak, logging-gelf, micrometer, narayana-jta, reactive-routes, resteasy-reactive, resteasy-reactive-jackson, smallrye-context-propagation, smallrye-health, vertx]
keycloak_web  | 2024-02-28 03:48:40,863 WARN  [org.keycloak.quarkus.runtime.KeycloakMain] (main) Running the server in development mode. DO NOT use this configuration in production.
keycloakdb-1  | 2024-02-28 03:49:29.450 UTC [35] WARNING:  database "keycloak" has a collation version mismatch
keycloakdb-1  | 2024-02-28 03:49:29.450 UTC [35] DETAIL:  The database was created using collation version 2.31, but the operating system provides version 2.36.
keycloakdb-1  | 2024-02-28 03:49:29.450 UTC [35] HINT:  Rebuild all objects in this database that use the default collation and run ALTER DATABASE keycloak REFRESH COLLATION VERSION, or build PostgreSQL with the right library version.

记录网址

http://localhost:8080/admin/master/console/

用户名和密码是

admin

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