钥匙斗篷&x2B;在docker上编写mysql。未保存任何数据

钥匙斗篷&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

因此,我尝试使用docker compose为Mysql后端设置一个key斗篷,但无论我做什么,key斗篷都拒绝实际创建任何表或在数据库中存储任何数据,即使它们都可以正常启动。
如果有人知道我做错了什么,我将永远感激

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
,这是一个问题。如果数据库是可访问的,它将实际使用它。我将在解决网络问题时对此答案进行编辑,以使其保持最新

旁注


值得注意的是,keydape
3.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