【问题标题】:Keycloak Docker container does not connect to MySQL databaseKeycloak Docker 容器未连接到 MySQL 数据库
【发布时间】: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吗?

标签: mysql docker keycloak


【解决方案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”,这导致了冲突。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-12
相关资源
最近更新 更多