meD*_*Dev 8 mysql docker keycloak
KeyCloak 新手。
尝试在将访问主机上的 MySQL 的容器中运行 KeyCloak(当前为 Windows 10,生产环境为 Linux)
按照此处输入链接描述中的步骤进行操作,当 KeyCloak 和 MySQL 都在自己的容器中时,它会根据那里的文档工作。
当尝试连接主机上现有的 MySQL 数据库并运行 KeyCloak docker 容器时,如下所示:
> docker run --name keycloak --network="host" -e DB_VENDOR=mysql -e DB_ADDR=host.docker.internal -e MYSQL_DATABASE=keycloak -e MYSQL_USERNAME=root -e MYSQL_PASSWORD=sqlpass -e KEYCLOAK_USER=kc-admin -e KEYCLOAK_PASSWORD=password jboss/keycloak
Run Code Online (Sandbox Code Playgroud)
甚至
docker run --name keycloak --network=host -e DB_VENDOR=MYSQL -e DB_ADDR=<actual ip address of host> -e MYSQL_DATABASE=keycloak -e MYSQL_USERNAME=root -e MYSQL_PASSWORD=sqlpass -e KEYCLOAK_USER=kc-admin -e KEYCLOAK_PASSWORD=password jboss/keycloak
Run Code Online (Sandbox Code Playgroud)
出现以下错误:
WFLYCTL0186: Services which failed to start: service org.wildfly.clustering.jgroups.channel.ee: java.lang.IllegalStateException: java.net.BindException: [UDP] /172.18.0.1 is not a valid address on any local network interface
Run Code Online (Sandbox Code Playgroud)
我认为在这些消息之后它就失败了......
19:33:30,381 INFO [org.jboss.as.server.deployment] (MSC service thread 1-1) WFLYSRV0027: Starting deployment of "keycloak-server.war" (runtime-name: "keycloak-server.war")
19:33:30,522 INFO [org.wildfly.extension.undertow] (MSC service thread 1-2) WFLYUT0006: Undertow HTTPS listener https listening on 0.0.0.0:8443
Run Code Online (Sandbox Code Playgroud)
在互联网上搜索了所谓的“生产就绪”场景,其中 MySQL 数据库将位于主机上,KeyCloak 可能位于 Docker 容器中,但没有找到太多帮助。
我究竟做错了什么?任何帮助/指示表示赞赏。谢谢。
更新:
当尝试删除网络时 - 出现不同的错误。
docker run --rm --name keycloak -e DB_VENDOR=MYSQL -e DB_ADDR=docker.host.internal -e MYSQL_DATABASE=keycloak -e MYSQL_USERNAME=root -e MYSQL_PASSWORD=sqlpass -e KEYCLOAK_USER=kc-admin -e KEYCLOAK_PASSWORD=password jboss/keycloak
Run Code Online (Sandbox Code Playgroud)
关于无法连接到数据库的更具体信息:
20:14:28,844 FATAL [org.keycloak.services] (ServerService Thread Pool -- 62) java.lang.RuntimeException: Failed to connect to database
Run Code Online (Sandbox Code Playgroud)
知道了。事实证明,我需要允许 MySQL 实例中的“keycloak”用户远程登录(意味着不仅从本地主机登录,还包括任何其他主机)。
我使用以下脚本为“keycloak”用户授予访问权限:
USE keycloak;
CREATE USER 'keycloak'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'password';
CREATE USER 'keycloak'@'<ip address of container>' IDENTIFIED WITH caching_sha2_password BY 'password';
GRANT ALL PRIVILEGES ON keycloak.* TO 'keycloak'@'localhost';
GRANT ALL PRIVILEGES ON keycloak.* TO 'keycloak'@'<ip address of container>';
Run Code Online (Sandbox Code Playgroud)
然后使用以下命令将 keycloak docker 镜像作为守护进程运行:
docker run --rm --name keycloak -d -p 8080:8080 -e DB_VENDOR=MYSQL -e DB_ADDR=host.docker.internal -e MYSQL_DATABASE=keycloak -e MYSQL_USERNAME=keycloak -e MYSQL_PASSWORD=password -e KEYCLOAK_USER=kc-admin -e KEYCLOAK_PASSWORD=password jboss/keycloak
Run Code Online (Sandbox Code Playgroud)
然后转到http://localhost:8080/auth访问 KeyCloak 管理控制台并使用之前定义的 kc-admin 用户凭据登录。
要找出容器的 IP 地址,请从此线程中使用 Windows 命令行:How to get a Docker container's IP address from the host
| 归档时间: |
|
| 查看次数: |
12344 次 |
| 最近记录: |