钥匙斗篷&x2B;在docker上编写mysql。未保存任何数据
因此,我尝试使用docker compose为Mysql后端设置一个key斗篷,但无论我做什么,key斗篷都拒绝实际创建任何表或在数据库中存储任何数据,即使它们都可以正常启动。钥匙斗篷&x2B;在docker上编写mysql。未保存任何数据,mysql,docker,docker-compose,keycloak,Mysql,Docker,Docker Compose,Keycloak,因此,我尝试使用docker compose为Mysql后端设置一个key斗篷,但无论我做什么,key斗篷都拒绝实际创建任何表或在数据库中存储任何数据,即使它们都可以正常启动。 如果有人知道我做错了什么,我将永远感激 version: '2' services: lab-mysql: container_name: lab-mysql restart: always image: my
如果有人知道我做错了什么,我将永远感激
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
为了让您的Key斗篷在不使用自己的嵌入式数据库(参考我的评论)的情况下尝试使用MySQL数据库,您应该更改一个变量:
DB\u供应商:mysql
进入
DB\u供应商:MYSQL
其他信息和提示
此外,这些服务启动过程应该分开(两个docker组合文件或一个服务等待另一个)因为keydape不知道MySQL何时完成初始化DB——这意味着它将继续并在无法访问MySQL DB时抛出异常,因为DB仍将启动<代码>依赖于
在这里是不够的,因为它不会等待服务准备就绪,解释得很好
我使用的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
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
我使用的keydape 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
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\u ADDR
变量,以便将其更改为运行DB的地址
超级重要信息
我没有成功地运行它,因为我仍在解决一个网络问题,这使得keydove
无法通过网络访问mysql
服务。尽管OP可能会发现它非常有用,因为此更改将把连接从嵌入式H2
更改为外部MySQL
,这是一个问题。如果数据库是可访问的,它将实际使用它。我将在解决网络问题时对此答案进行编辑,以使其保持最新
旁注
值得注意的是,keydove
3.4.3
(此处使用)在版本5.1
中使用mysql驱动程序,这需要版本为5.6
、5.7
及更高版本的mysql服务器。为了让您的keydove在不使用自己的嵌入式数据库的情况下尝试使用mysql数据库(参考我的评论),您应该更改一个变量:
DB\u供应商:mysql
进入
DB\u供应商:MYSQL
其他信息和提示
此外,这些服务启动过程应该分开(两个docker组合文件或一个服务等待另一个)因为keydape不知道MySQL何时完成初始化DB——这意味着它将继续并在无法访问MySQL DB时抛出异常,因为DB仍将启动<代码>依赖于
在这里是不够的,因为它不会等待服务准备就绪
,解释得很好
我使用的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
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
我使用的keydape 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
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\u ADDR
变量,以便将其更改为运行DB的地址
超级重要信息
我没有成功地运行它,因为我仍在解决一个网络问题,这使得keydove
无法通过网络访问mysql
服务。尽管OP可能会发现它非常有用,因为此更改将把连接从嵌入式H2
更改为外部MySQL
,这是一个问题。如果数据库是可访问的,它将实际使用它。我将在解决网络问题时对此答案进行编辑,以使其保持最新
旁注
值得注意的是,keydape3.4.3
(此处使用)在版本5.1
中使用mysql驱动程序,这需要版本为5.6
、5.7
及更高版本的mysql服务器?您有一个restart:always
选项,这意味着如果它们以某种方式失败,它们将立即重新站起来。这将使您在日志中发现问题之前无法意识到问题。您应该仔细检查日志,因为可能会有一些警告指出问题所在。我将尝试运行您的配置。尝试将keydove\u LOGLEVEL:DEBUG
添加到您的keydove环境变量中,因为这会增加日志的详细程度,并可能会暴露问题。我不知道您可以在env vars中设置日志级别。谢谢我会用它做一些错误搜索,看看我是否找到了什么。我启动了你的配置,这是我在调试日志中找到的:[keydape DOCKER IMAGE]使用嵌入式H2数据库
,这意味着它没有连接到MySQL数据库,问题是-db初始化的时间很长,而KeyClope并没有等待它,我现在正在测试一个单独的设置,db已经初始化并等待KeyClope。你确定它们都正确启动了吗?您有一个restart:always
选项,这意味着如果它们以某种方式失败,它们将立即重新站起来。这将使您在日志中发现问题之前无法意识到问题。您应该仔细检查日志,因为可能会有一些警告指出问题所在。我将尝试运行您的配置。尝试将keydove\u LOGLEVEL:DEBUG
添加到您的keydove环境变量中,因为这会增加日志的详细程度,并可能会暴露问题。我不知道您可以在env vars中设置日志级别。谢谢我会用它做一些错误搜索,看看是否有什么发现。我启动了你的配置,这是我在调试日志中找到的:[keydape DOCKER IMAGE]Usi