首页 > 解决方案 > keycloak docker mysql连接链接失败

问题描述

我正在尝试将 mysql 用于 keycloak 并且之前使用过相同的配置,但这次它给出了链接失败。

volumes:
  mysql_data:
    driver: local

services:
  mysql:
    image: mysql:5.7
    volumes:
       - mysql_data:/var/lib/mysql
    ports:
       - 3306:3306
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_DATABASE: keycloak
      MYSQL_USER: keycloak
      MYSQL_PASSWORD: password

  keycloak:
    build: keycloak-image
    image: km-keycloak
    environment:
      PROXY_ADDRESS_FORWARDING: "true"
      DB_VENDOR: MYSQL
      DB_ADDR: mysql
      DB_DATABASE: keycloak
      DB_USER: keycloak
      DB_PASSWORD: password
      KEYCLOAK_USER: admin
      KEYCLOAK_PASSWORD: admin
    volumes:
      - mysql_data:/opt/jboss/mysql_data
    depends_on:
      - mysql
    links:
      - mysql

我的 keycloak 图像 docker 文件看起来像

FROM jboss/keycloak

COPY km.json /opt/jboss
COPY entrypoint.sh /opt/jboss

USER root
RUN chown jboss /opt/jboss/entrypoint.sh && chmod +x /opt/jboss/entrypoint.sh
USER 1000

ENTRYPOINT ["/opt/jboss/entrypoint.sh"]
CMD [""]

关键斗篷的入口点看起来像

#!/bin/bash

if [[ -e /opt/jboss/mysql_data/keycloak ]]; then
    /opt/jboss/tools/docker-entrypoint.sh -b 0.0.0.0
else
    /opt/jboss/tools/docker-entrypoint.sh -Dkeycloak.migration.action=import -Dkeycloak.migration.provider=singleFile -Dkeycloak.migration.file='km.json' -b 0.0.0.0
fi

我得到的错误是

引起:javax.resource.ResourceException:IJ031084:无法创建连接引起:com.mysql.jdbc.exceptions.jdbc4.CommunicationsException:通信链接失败引起:javax.net.ssl.SSLHandshakeException:没有适当的协议(协议是禁用或密码套件不合适)

标签: mysqldockerjbosskeycloak

解决方案


添加

  JDBC_PARAMS: "useSSL=false"

keycloak environmentdocker-compose 文件中的变量。
(例如直接在 之后KEYCLOAK_PASSWORD

根据您的设置,可能不需要在 2 个容器之间使用受 SSL 保护的连接。

我不确定为什么现在会发生此错误。它在 keycloak 版本中工作,7.0.0但它不再工作7.0.1了。也许java版本改变了,不再信任默认的mysql-containers ssl cert

错误 [stderr] (ServerService Thread Pool -- 70) Thu Nov 14 20:55:46 UTC 2019 警告:不建议在没有服务器身份验证的情况下建立 SSL 连接。根据 MySQL 5.5.45+、5.6.26+ 和 5.7.6+ 的要求,如果未设置显式选项,则默认情况下必须建立 SSL 连接。为了符合不使用 SSL 的现有应用程序,verifyServerCertificate 属性设置为“false”。您需要通过设置 useSSL=false 来显式禁用 SSL,或者设置 useSSL=true 并为服务器证书验证提供信任库。


推荐阅读