[英]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
已經采取的步驟:
任何幫助將不勝感激!
在多階段構建中,每個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.