Keycloak Docker 容器未连接到 MySQL 数据库
Posted
技术标签:
【中文标题】Keycloak Docker 容器未连接到 MySQL 数据库【英文标题】:Keycloak Docker container does not connect to MySQL database 【发布时间】:2022-01-07 21:46:10 【问题描述】:我正在尝试在 Docker 容器内设置 Keycloak 服务器,我希望 它利用存储在主机上的 mysql 数据库,但我想要这个 由也在内部运行的 MySQL 实例管理的数据库 码头集装箱。但是,我无法让它工作。
到目前为止,我已经尝试了以下方法:
# Create network for keycloak
docker network create edci-network
# First start up MySQL server…
docker run \
--name edci-keycloak-mysql \
-d \
--net edci-network \
-e MYSQL_DATABASE=edci-keycloak \
-e MYSQL_USER=edci-keycloak \
-e MYSQL_PASSWORD=password \
-v /path/to/local/database:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=root_password \
mysql
# … then run Keycloak with token exchange enabled.
docker run \
--name edci-keycloak \
-d \
-p 9000:8080 \
--net edci-network \
-e KEYCLOAK_USER=admin \
-e KEYCLOAK_PASSWORD=admin \
-e DB_ADDR=edci-keycloak-mysql \
-e DB_PASSWORD=password \
-e JAVA_OPTS_APPEND="
-Dkeycloak.profile.feature.token_exchange=enabled
-Dkeycloak.profile.feature.admin_fine_grained_authz=enabled
" \
quay.io/keycloak/keycloak:15.0.2
但是,Keycloak 日志声明
使用 H2 数据库
在服务器启动时。我在这里做错了什么? MySQL 示例 Keycloak Docker Hub 页面上的也无法正常工作。
请注意,使用 Docker Compose 不是一种选择,所以答案依赖于它 不考虑。感谢您的帮助。
Keycloak 容器日志:https://pastebin.com/b56cmxBJ。
【问题讨论】:
你的 docker run for keycloak;有-e DB_USER=edci-keycloak
吗?
@gohm'c 我也尝试了设置该环境变量,但没有帮助。
你需要那个 DB_USER,你能设置DB_ADDR=<your host primary IP>
看看它是否有效吗?
“主机主IP”是指kubernetes.docker.internal
吗?
【参考方案1】:
您没有使用预定义的值(例如 Keycloak 容器需要 DB 名称 keycloak
),因此您需要明确配置所有 DB 详细信息(环境变量 DB_*
):
# Create network for keycloak
docker network create edci-network
# First start up MySQL server…
docker run \
--name edci-keycloak-mysql \
-d \
--net edci-network \
-e MYSQL_DATABASE=edci-keycloak \
-e MYSQL_USER=edci-keycloak \
-e MYSQL_PASSWORD=password \
-v /path/to/local/database:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=root_password \
mysql
# … then run Keycloak with token exchange enabled.
docker run \
--name edci-keycloak \
-d \
-p 9000:8080 \
--net edci-network \
-e KEYCLOAK_USER=admin \
-e KEYCLOAK_PASSWORD=admin \
-e DB_VENDOR=mysql \
-e DB_ADDR=edci-keycloak-mysql \
-e DB_DATABASE=edci-keycloak \
-e DB_USER=edci-keycloak \
-e DB_PASSWORD=password \
-e JAVA_OPTS_APPEND="
-Dkeycloak.profile.feature.token_exchange=enabled
-Dkeycloak.profile.feature.admin_fine_grained_authz=enabled
" \
quay.io/keycloak/keycloak:15.0.2
【讨论】:
嗯。奇怪的是,Keycloak 服务器仍然拒绝启动,尽管“使用 H2 数据库”已替换为“使用 MySQL 数据库”。以下是最新日志:pastebin.com/yrYEMezD。主要原因似乎在第 234 行:“原因:java.sql.SQLException: Access denied for user 'edci-keycloak'@'172.18.0.3' (using password: YES)” 我想知道这是否是原因(来自 MySQL Docker Hub 页面):“如果您使用已经包含数据库(特别是 mysql 子目录)的数据目录启动 mysql 容器实例,则 $ MYSQL_ROOT_PASSWORD 变量应该从运行命令行中省略;在任何情况下都将被忽略,并且不会以任何方式更改预先存在的数据库。"。 是的,我认为这就是问题所在。最初创建的数据库也可能使用名称“keycloak”,这导致了冲突。以上是关于Keycloak Docker 容器未连接到 MySQL 数据库的主要内容,如果未能解决你的问题,请参考以下文章
docker 容器中的 Keycloak + 主机上的 MySQL 提供 [org.keycloak.services] (ServerService 线程池 -- 62) 无法连接到数据库
keycloak 容器正在重新启动,但出现错误 docker-compose