当前位置: 首页 > 知识库问答 >
问题:

主机上docker容器MySQL中的KeyClope使[org.keydepot.services](ServerService线程池--62)无法连接到数据库

邓鸿彩
2023-03-14

新的钥匙斗篷。

试图在主机上访问MySQL的容器中运行KeyClope(目前为Windows 10,生产环境为Linux)

按照此处输入链接描述中的步骤进行操作,当keydove和MySQL都位于各自的容器中时,它将根据那里的文档工作。

当尝试连接主机上现有的MySQL数据库并运行KeyClope 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

甚至

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

获取以下错误:

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

我认为在这些信息之后它就失败了。。。

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

在互联网上搜索所谓的“生产就绪”场景,其中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

关于无法连接到数据库的更多详细信息:

20:14:28,844 FATAL [org.keycloak.services] (ServerService Thread Pool -- 62) java.lang.RuntimeException: Failed to connect to database

共有3个答案

周通
2023-03-14

这里有一个答案,任何人使用普莱斯克与钥匙斗篷码头工人。这就是我在服务器上运行一切的方式:

至于我的Docker环境变量:

DB_DATABASE: keycloak
DB_USER: keycloak
DB_PASSWORD:my_password
DB_VENDOR:mariadb
DB_ADDR:172.17.0.1

对于数据库用户,我已将远程访问设置为特定的ip范围:

172.17.0.%

所以我不需要知道具体的docker ip

最后一步,对我来说完成了整个技巧,就是将数据库服务器设置为监听所有网络接口(Plesk黑曜石):工具

如果您对此设置有任何安全提示,请告诉我。

以下是一些对我有帮助的参考资料:

  • https://support.plesk.com/hc/en-us/articles/213904365-How-to-enable-remote-access-to-MySQL-server-in-Plesk-
  • https://hub.docker.com/r/jboss/keycloak/
  • https://forums.docker.com/t/container-cannot-connect-to-the-hosts-mysql-database/3493/3
濮阳景天
2023-03-14

公认的答案可能已经过时。

-e MYSQL_DATABASE=keycloak -e MYSQL_USERNAME=keycloak

应替换为:

-e DB_USER=keycloak -e DB_PASSWORD=keycloak
姜鸿畴
2023-03-14

知道了。事实证明,我需要允许MySQL实例中的“KeyClope”用户远程登录(这不仅意味着从本地主机登录,还意味着从任何其他主机登录)。

我使用以下脚本为“KeyClope”用户授予访问权限:

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>';

然后使用以下命令作为守护程序运行KeyClope 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

然后去http://localhost:8080/auth 使用前面定义的kc admin用户凭据访问Key斗篷管理控制台并登录。

要查找容器的ip地址,请使用以下线程中的windows命令行:如何从主机获取Docker容器的ip地址

 类似资料:
  • 我试图部署一个与主机数据库一起工作的Drupal6Docker容器(在将其部署到远程数据库之前出于测试目的),但它就是不想工作,尽管我找到了不同的建议。(特别是在这个来自Docker容器内部的问题中,我如何连接到机器的本地主机?当它谈到主机模式时,所以即使这个问题看起来很像,它也不觉得它是重复的) DockerFile Docker-compose.yml 对于数据库连接,我指定了以下设置: 驱动

  • (由于我对Docker或mysql管理的了解有限,这可能是一个愚蠢的问题,但由于我花了整整一个晚上讨论这个问题,所以我敢问这个问题。) 概括地说 我想在docker容器中运行mysql,并从我的主机连接到它。到目前为止,我取得的最好成绩是: 更多详细信息 我正在使用以下: 在有此文件的目录中,我可以成功地构建映像并运行它: 当我连接到图像上时,它似乎工作得很好: 然而,我并没有从主持人那里获得那么

  • 厘斯7.8 docker run -d -p 8080:80 --name nginxtest nginx docker ps CONTAINER ID Image PORTS NAMES xxxxxxxx nginx 0.0.0.0:8080- curl localhost:8080 < br > curl:(56)Recv失败:连接被对等方重置 netstat-tulpn<br>tcp6 0

  • 我已经创建了一个MySQL数据库的映像,并在容器中运行它。我希望它在端口3406/3407上运行,因此我调用docker run命令如下所示: 如果我看我的容器,它看起来是这样的: 我非常想连接到我的数据库现在,但我似乎不能使我的URL工作。 这是我的URL的样子:

  • 问题内容: 我有用于创建mysql映像的docker- compose文件,并将端口公开给3306,但是当我尝试安装CMS时,出现了无法连接数据库的错误。我尝试扫描端口3306,并向我显示它已打开,因此mysql正在运行。 为什么两个Docker容器彼此看不到? 这是我的docker-compose文件: 问题答案: 要连接到数据库,请使用您作为主机名提供的链接/别名。因此,您的CMS可以使用主机

  • 问题内容: 我正在运行一个docker mysql映像,以下是docker-compose.yml文件的外观: 这很好。 我的问题是:如何从主机(我的Macbook)上的命令行mysql客户端连接到在该容器上运行的MySQL实例? 澄清: 我有一台装有Docker的Macbook 我有一个带有mysql的docker容器 我想从Macbook的终端连接到上述容器上运行的mysql实例 我不想使用命