簡體   English   中英

Java.net.ConnectException:Docker + Keycloak 上的連接被拒絕

[英]Java.net.ConnectException: Connection refused on Docker + Keycloak

我是 Docker 的新手,很難將 Keycloak 連接到我的本地 MySQL 數據庫。 有沒有人知道發生了什么? 這是我的Dockerfile

FROM jboss/keycloak:14.0.0

ADD JDBC_PING.cli /opt/jboss/tools/cli/jgroups/discovery/
USER root

ENV DB_VENDOR MYSQL
ENV DB_ADDR host.internal.docker
ENV DB_PORT 3306
ENV DB_DATABASE keycloak
ENV DB_USER root
ENV DB_PASSWORD mydbpass
ENV PROXY_ADDRESS_FORWARDING true
ENV KEYCLOAK_USER admin
ENV KEYCLOAK_PASSWORD mykcpass
ENV PROXY_ADDRESS_FORWARDING true
ENV JGROUPS_DISCOVERY_PROTOCOL JDBC_PING
ENV JGROUPS_DISCOVERY_PROPERTIES datasource_jndi_name=java:jboss/datasources/KeycloakDS
ENV CACHE_OWNERS_COUNT 2
ENV CACHE_OWNERS_AUTH_SESSIONS_COUNT 2
ENV JAVA_OPTS -server -Xms8048m -Xmx8048m -XX:MetaspaceSize=96M -XX:MaxMetaspaceSize=512m -Djava.net.preferIPv4Stack=true -Djboss.modules.system.pkgs=$JBOSS_MODULES_SYSTEM_PKGS,com.newrelic -Djava.awt.headless=true


COPY . /project
RUN cd /project && ./mvnw clean package

FROM jboss/keycloak:14.0.0
USER root
COPY --from=0 /project/target/*.jar /opt/jboss/keycloak/standalone/deployments/app.jar
USER 1000

ENV KEYCLOAK_HTTP_PORT 80
ENV KEYCLOAK_HTTPS_PORT 443
EXPOSE 8080
EXPOSE 8443

錯誤日志顯示

FATAL [org.keycloak.services] (ServerService Thread Pool -- 59) Error during startup: java.lang.RuntimeException: Failed to connect to database

...............
Caused by: java.net.ConnectException: Connection refused (Connection refused)
        at java.base/java.net.PlainSocketImpl.socketConnect(Native Method)
        at java.base/java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:399)
        at java.base/java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:242)
        at java.base/java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:224)
        at java.base/java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
        at java.base/java.net.Socket.connect(Socket.java:609)
        at com.mysql.jdbc@8.0.22//com.mysql.cj.protocol.StandardSocketFactory.connect(StandardSocketFactory.java:155)
        at com.mysql.jdbc@8.0.22//com.mysql.cj.protocol.a.NativeSocketConnection.connect(NativeSocketConnection.java:63)
        ... 64 more

已經采取的步驟:

  • 禁用防火牆;
  • 將 bind-address: 0.0.0.0 添加到 my.cnf 文件中;
  • root@% 已經擁有所有權限;
  • 嘗試在所有可能的配置中設置 DB_ADDR 和 DB_VENDOR;
  • 服務器已經啟動並且通過 Workbench 的連接運行良好。

任何幫助將不勝感激!

在多階段構建中,每個FROM行都會完全重置ENV設置等內容,因此第一階段的設置不會出現在最終圖像中。

FROM jboss/keycloak:14.0.0 AS build
ENV DB_VENDOR MYSQL
...
FROM jboss/keycloak:14.0.0  # resets ENV settings
RUN echo $DB_VENDOR         # will be empty

通常,不應將數據庫位置和憑據等運行時或部署時設置編譯到 Dockerfile 中。 (當你將它部署到不同的地方時,你不想重建鏡像,並且可以很容易地從構建的鏡像中提取憑據。)如果你通過 Docker Compose 運行它,你可以將這些特定於環境的設置放入您docker-compose.yml文件,或使用外部環境文件

version: '3.8'
services:
  keycloak:
    build: .
    # env_file: keycloak.env  # would replace the settings below
    environment:
      DB_ADDR: host.internal.docker
      DB_USER: root
      DB_PASSWORD: password
      ET: cetera

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM