Keycloak server в докере не запускается в автономном режиме? - PullRequest
2 голосов
/ 17 мая 2019

Ну, как следует из названия, это скорее проблема записи. Я пытался следовать инструкциям в этом README файле образов докер-сервера Keycloak, но столкнулся с несколькими блокировщиками.

После извлечения изображения приведенная ниже команда запустить автономный экземпляр не удалась.

docker run jboss/keycloak

Трассировка стека ошибок:

-b 0.0.0.0
=========================================================================

  Using PostgreSQL database

=========================================================================

...

04:45:06,084 INFO  [io.smallrye.metrics] (MSC service thread 1-5) Converted [2] config entries and added [4] replacements
04:45:06,096 ERROR [org.jboss.as.controller.management-operation] (ServerService Thread Pool -- 33) WFLYCTL0013: Operation ("add") failed - address: ([
    ("subsystem" => "datasources"),
    ("data-source" => "KeycloakDS")
]) - failure description: "WFLYCTL0113: '' is an invalid value for parameter user-name. Values must have a minimum length of 1 characters"
...
Caused by: java.lang.RuntimeException: Failed to connect to database
    at org.keycloak.connections.jpa.DefaultJpaConnectionProviderFactory.getConnection(DefaultJpaConnectionProviderFactory.java:382)
...
Caused by: javax.naming.NameNotFoundException: datasources/KeycloakDS -- service jboss.naming.context.java.jboss.datasources.KeycloakDS
    at org.jboss.as.naming.ServiceBasedNamingStore.lookup(ServiceBasedNamingStore.java:106)
...

Мне было интересно, как он использует базу данных PostgreSQL, и предполагал, что он может раскрутить свой собственный экземпляр. Но, похоже, ошибка связана с подключением к базе данных.

Переход на встроенную базу данных H2 заставил ее работать.

docker run -e DB_VENDOR="h2" --name docker-keycloak-h2 jboss/keycloak

Файл docker-entrypoint.sh показывает, что он использует приведенную ниже логику для определения используемой БД.

if (getent hosts postgres &>/dev/null); then
        export DB_VENDOR="postgres"
...

И далее по ходу этого файла change-database.cli указывает, что он действительно ожидает использования запущенного экземпляра PostgreSQL.

connection-url=jdbc:postgresql://${env.DB_ADDR:postgres}:${env.DB_PORT:5432}/${env.DB_DATABASE:keycloak}${env.JDBC_PARAMS:}

Так что я начал задаваться вопросом, как PostgreSQL был выбран по умолчанию изначально. Выполнение приведенных ниже команд в работающем Docker-контейнере Keycloak выявило некоторые интересные вещи.

[root@71961b81189c bin]# getent hosts postgres
69.172.201.153  postgres.mbox.com
[root@71961b81189c bin]# echo $?
0

Не уверен, что это postgres.mbox.com, но, видимо, это не ожидаемый сервер PostgreSQL, который должен быть разрешен getent. Не уверен, что это недавняя проблема Linux. Запись hosts в файле конфигурации переключателя службы имен /etc/nsswitch.conf внутри контейнера выглядит следующим образом.

hosts:      files dns myhostname

Это источник данных dns, который разрешил postgres в postgres.mbox.com.


Вот почему логика определения поставщика БД завершилась неудачно, что в итоге привело к невозможности запуска контейнера. Инструкции к этому файлу README не работают со дня публикации этого сообщения.

Ниже приведены рабочие команды для правильного запуска сервера Keycloak в Docker с PostgreSQL в качестве базы данных.

docker network create keycloak-network

docker run -d --name postgres --net keycloak-network -e POSTGRES_DB=keycloak -e POSTGRES_USER=keycloak -e POSTGRES_PASSWORD=password postgres

docker run --name docker-keycloak-postgres --net keycloak-network -e DB_USER=keycloak -e DB_PASSWORD=password jboss/keycloak

Ответы [ 2 ]

5 голосов
/ 10 июля 2019

Я столкнулся с той же проблемой.Как оказалось, ключом к решению стал отсутствующий параметр «DB_USER = keycloak».

Приложение попыталось пройти аутентификацию в базе данных, используя имя пользователя ''.На это указывало первое сообщение об ошибке.

WFLYCTL0113: '' is an invalid value for parameter user-name

Возможно, в версиях 4.x и 5.0.0 для имени пользователя по умолчанию было задано значение "keycloak", которого больше не было в 6.0.0.

После добавления параметра DB_USER = keycloak в список переменных среды keycloak запустился без проблем.

0 голосов
/ 04 июня 2019

Теперь проблема больше не возникает.Я голосую, чтобы закрыть вопрос.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...