Kycloak + MySQL на Docker сочинять. Данные не сохранены - PullRequest
0 голосов
/ 07 мая 2018

Итак, я пытаюсь настроить Keycloak с Mysql back-end, используя docker compose, но независимо от того, что я делаю, Keycloak отказывается создавать какие-либо таблицы или сохранять какие-либо данные в базе данных, даже если они оба запускаются просто отлично.
Если кто-нибудь знает, что я делаю неправильно, я буду вечно благодарен.

version: '2'
services:
        lab-mysql:
                container_name: lab-mysql
                restart: always
                image: mysql/mysql-server:5.7
                environment:
                        MYSQL_ROOT_PASSWORD: password
                        MYSQL_ROOT_HOST: "%"
                        MYSQL_DATABASE: keycloak
                        MYSQL_USER: keycloak
                        MYSQL_PASSWORD: password
                volumes:
                        - ./lab-mysql:/var/lib/mysql
                ports:
                        - 3306:3306
        keycloak:
                container_name: lab-keycloak
                restart: always
                image: jboss/keycloak:3.4.3.Final
                depends_on:
                        - lab-mysql
                environment:
                        DB_VENDOR: mysql
                        DB_ADDR: lab-mysql
                        DB_PORT: 3306
                        DB_DATABASE: keycloak
                        DB_USER: keycloak
                        DB_PASSWORD: password
                        KEYCLOAK_USER: admin
                        KEYCLOAK_PASSWORD: password
                ports:
                        - 8080:8080
                        - 8443:8443
                        - 9990:9990
                volumes:
                        - ./lab-keycloak:/data
                links:
                        - lab-mysql

1 Ответ

0 голосов
/ 07 мая 2018

Чтобы ваш Keycloak попытался использовать вашу MySQL DB без использования собственной встроенной БД (ссылка на мои комментарии), вы должны изменить переменную:

DB_VENDOR: mysql

в

DB_VENDOR: MYSQL

Дополнительная информация и советы

Кроме того, процесс запуска этих служб должен быть разделен (два docker-compose файла или один сервис ожидает другого), потому что Keycloak не знает, когда MySQL завершит инициализацию DB - то есть он продолжится и выбросить исключение, когда он не сможет получить доступ к БД MySQL, так как БД все еще будет запускаться. depends_on здесь недостаточно, потому что он не ждет, пока служба ready, хорошо объяснено здесь

mysql-compose.yml Я использовал:

version: '2'
services:
        lab-mysql:
                image: mysql/mysql-server:5.7
                environment:
                        MYSQL_ROOT_PASSWORD: keycloak
                        MYSQL_ROOT_HOST: "%"
                        MYSQL_DATABASE: keycloak
                        MYSQL_USER: keycloak
                        MYSQL_PASSWORD: keycloak
                ports:
                        - 3306:3306

keycloak-compose.yml Я использовал:

version: '2'
services:
        keycloak:
                image: jboss/keycloak:3.4.3.Final
                environment:
                        DB_VENDOR: MYSQL
                        DB_ADDR: 10.28.0.35
                        DB_PORT: 3306
                        DB_DATABASE: keycloak
                        DB_USER: keycloak
                        DB_PASSWORD: keycloak
                        KEYCLOAK_USER: admin
                        KEYCLOAK_PASSWORD: password
                ports:
                        - 8070:8080
                        - 8443:8443
                        - 9990:9990

Обратите внимание на изменение DB_VENDOR, которое здесь имеет решающее значение, поскольку теперь оно фактически меняется на использование MySQL. Также обратите внимание на переменную DB_ADDR, чтобы вы изменили ее на адрес, по которому запускается БД.

Супер важная информация

Мне не удалось запустить его успешно из-за проблемы с сетью, которую я до сих пор решаю, из-за чего keycloak не смог подключиться к mysql по сети. Хотя OP может оказаться очень полезным, так как это изменение изменит соединение с embedded H2 на external MySQL, что является заданным вопросом. И , если БД доступна, она фактически будет использовать ее . Я буду вносить изменения в этот ответ, когда решу проблему с сетью, чтобы поддерживать ее в актуальном состоянии.

Примечание

Стоит отметить, что Keycloak 3.4.3 (используется здесь) использует драйвер mysql в версии 5.1, для которой требуется MySQL server с версией 5.6, 5.7 и выше.

...