Keycloak + mysql on docker compose.未保存任何数据



所以我正在尝试使用docker compose在Mysql后端设置Keycloak,但无论我做什么,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

为了让您的Keycloak尝试使用MySQL数据库而不使用其自己的嵌入式数据库(参考我的评论(,您应该更改一个变量:

DB_VENDOR: mysql

DB_VENDOR: MYSQL

其他信息和提示

此外,这些服务启动过程应该分开(两个docker-compose文件或一个服务等待另一个(,因为Keycloak不知道你的MySQL何时完成初始化数据库- 这意味着当它无法访问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这是所提出的问题。如果数据库是可访问的,它实际上会利用它。当我解决我的网络问题时,我将对此答案进行编辑以使其保持最新。

旁注

值得注意的是,Keycloak3.4.3(此处使用(在版本5.1中使用 mysql 驱动程序,这需要与版本5.65.7及更高版本MySQL server

最新更新