无法使用KeyCloak的JBoss Docker映像连接到SQL服务器

41zrol4v  于 2022-11-08  发布在  Docker
关注(0)|答案(1)|浏览(168)

所以我已经启动了SQL Server Docker映像:

docker run -e "ACCEPT_EULA=Y" -e "SA_PASSWORD=Test@123" \
-p 1433:1433 --name sql1 -h sql1 -d mcr.microsoft.com/mssql/server:2019-latest

使用Microsoft SQL Management Studio,我可以连接到localhost,1433。我创建了一个名为keycloak的数据库,sa是该数据库的所有者。
现在运行如下Keycloak映像无法连接到数据库:

docker run --rm --name keycloak -p 8080:8080 -e DB_VENDOR=mssql -e DB_USER=sa \
-e DB_PASSWORD=Test@123 -e DB_ADDR=localhost -e DB_PORT=1433 -e DB_DATABASE=keycloak \
-e KEYCLOAK_USER=admin  -e KEYCLOAK_PASSWORD=admin jboss/keycloak

它会失败,并显示以下错误:

Caused by: com.microsoft.sqlserver.jdbc.SQLServerException: The TCP/IP connection to the host localhost, port 1433 has failed. 
Error: "Connection refused (Connection refused). 
Verify the connection properties. Make sure that an instance of SQL Server is running on the host and accepting TCP/IP connections at the port. 
Make sure that TCP connections to the port are not blocked by a firewall.".

在日志中搜索时,首先出现了上述错误,但随后到处都出现了此错误,这可能是前一个错误的副作用,但至少它告诉我使用了正确的JDBC URL:

ERROR [org.jboss.as.controller.management-operation] (ServerService Thread Pool -- 20) WFLYCTL0403: Unexpected failure during execution of the following operation(s): [{
    "operation" => "add",
    "address" => [("subsystem" => "security")]
}, {
    "operation" => "add",
    "address" => [
        ("subsystem" => "security"),
        ("security-domain" => "other")
    ],
    "cache-type" => "default"
}, {
    "operation" => "add",
    "address" => [
        ("subsystem" => "security"),
        ("security-domain" => "other"),
        ("authentication" => "classic")
    ]
}, {
    "operation" => "add",
    "address" => [
        ("subsystem" => "security"),
        ("security-domain" => "other"),
        ("authentication" => "classic"),
        ("login-module" => "Remoting")
    ],
    "code" => "Remoting",
    "flag" => "optional",
    "module-options" => {"password-stacking" => "useFirstPass"}
}, {
    "operation" => "add",
    "address" => [
        ("subsystem" => "security"),
        ("security-domain" => "other"),
        ("authentication" => "classic"),
        ("login-module" => "RealmDirect")
    ],
    "code" => "RealmDirect",
    "flag" => "required",
    "module-options" => {"password-stacking" => "useFirstPass"}
}, {
    "operation" => "add",
    "address" => [
        ("subsystem" => "security"),
        ("security-domain" => "jboss-web-policy")
    ],
    "cache-type" => "default"
}, {
    "operation" => "add",
    "address" => [
        ("subsystem" => "security"),
        ("security-domain" => "jboss-web-policy"),
        ("authorization" => "classic")
    ]
}, {
    "operation" => "add",
    "address" => [
        ("subsystem" => "security"),
        ("security-domain" => "jboss-web-policy"),
        ("authorization" => "classic"),
        ("policy-module" => "Delegating")
    ],
    "code" => "Delegating",
    "flag" => "required"
}, {
    "operation" => "add",
    "address" => [
        ("subsystem" => "security"),
        ("security-domain" => "jaspitest")
    ],
    "cache-type" => "default"
}, {
    "operation" => "add",
    "address" => [
        ("subsystem" => "security"),
        ("security-domain" => "jaspitest"),
        ("authentication" => "jaspi")
    ]
}, {
    "operation" => "add",
    "address" => [
        ("subsystem" => "security"),
        ("security-domain" => "jaspitest"),
        ("authentication" => "jaspi"),
        ("login-module-stack" => "dummy")
    ]
}, {
    "operation" => "add",
    "address" => [
        ("subsystem" => "security"),
        ("security-domain" => "jaspitest"),
        ("authentication" => "jaspi"),
        ("login-module-stack" => "dummy"),
        ("login-module" => "Dummy")
    ],
    "code" => "Dummy",
    "flag" => "optional"
}, {
    "operation" => "add",
    "address" => [
        ("subsystem" => "security"),
        ("security-domain" => "jaspitest"),
        ("authentication" => "jaspi"),
        ("auth-module" => "Dummy")
    ],
    "code" => "Dummy"
}, {
    "operation" => "add",
    "address" => [
        ("subsystem" => "security"),
        ("security-domain" => "jboss-ejb-policy")
    ],
    "cache-type" => "default"
}, {
    "operation" => "add",
    "address" => [
        ("subsystem" => "security"),
        ("security-domain" => "jboss-ejb-policy"),
        ("authorization" => "classic")
    ]
}, {
    "operation" => "add",
    "address" => [
        ("subsystem" => "security"),
        ("security-domain" => "jboss-ejb-policy"),
        ("authorization" => "classic"),
        ("policy-module" => "Delegating")
    ],
    "code" => "Delegating",
    "flag" => "required"
}]: java.lang.RuntimeException: WFLYCTL0195: Interrupted awaiting transaction commit or rollback
    at org.jboss.as.controller@15.0.1.Final//org.jboss.as.controller.ParallelBootOperationStepHandler$ParallelBootTransactionControl.operationPrepared(ParallelBootOperationStepHandler.java:458)
    at org.jboss.as.controller@15.0.1.Final//org.jboss.as.controller.ModelController$OperationTransactionControl.operationPrepared(ModelController.java:131)
    at org.jboss.as.controller@15.0.1.Final//org.jboss.as.controller.AbstractOperationContext.executeDoneStage(AbstractOperationContext.java:874)
    at org.jboss.as.controller@15.0.1.Final//org.jboss.as.controller.AbstractOperationContext.processStages(AbstractOperationContext.java:805)
    at org.jboss.as.controller@15.0.1.Final//org.jboss.as.controller.AbstractOperationContext.executeOperation(AbstractOperationContext.java:468)
    at org.jboss.as.controller@15.0.1.Final//org.jboss.as.controller.ParallelBootOperationStepHandler$ParallelBootTask.run(ParallelBootOperationStepHandler.java:384)
    at org.jboss.threads@2.4.0.Final//org.jboss.threads.ContextClassLoaderSavingRunnable.run(ContextClassLoaderSavingRunnable.java:35)
    at org.jboss.threads@2.4.0.Final//org.jboss.threads.EnhancedQueueExecutor.safeRun(EnhancedQueueExecutor.java:1990)
    at org.jboss.threads@2.4.0.Final//org.jboss.threads.EnhancedQueueExecutor$ThreadBody.doRunTask(EnhancedQueueExecutor.java:1486)
    at org.jboss.threads@2.4.0.Final//org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1377)
    at java.base/java.lang.Thread.run(Thread.java:829)
    at org.jboss.threads@2.4.0.Final//org.jboss.threads.JBossThread.run(JBossThread.java:513)

[0m[31m06:20:09,064 ERROR [org.jboss.as.controller.management-operation] (ServerService Thread Pool -- 18) WFLYCTL0403: Unexpected failure during execution of the following operation(s): [{
    "operation" => "add",
    "address" => [("subsystem" => "datasources")]
}, {
    "operation" => "add",
    "jndi-name" => "java:jboss/datasources/ExampleDS",
    "enabled" => true,
    "use-java-context" => true,
    "statistics-enabled" => expression "${wildfly.datasources.statistics-enabled:${wildfly.statistics-enabled:false}}",
    "address" => [
        ("subsystem" => "datasources"),
        ("data-source" => "ExampleDS")
    ],
    "connection-url" => "jdbc:h2:mem:test;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE",
    "driver-name" => "h2",
    "user-name" => "sa",
    "password" => "sa"
}, {
    "operation" => "add",
    "jndi-name" => "java:jboss/datasources/KeycloakDS",
    "enabled" => true,
    "use-java-context" => true,
    "use-ccm" => true,
    "address" => [
        ("subsystem" => "datasources"),
        ("data-source" => "KeycloakDS")
    ],
    "connection-url" => expression "jdbc:sqlserver://${env.DB_ADDR:mssql}:${env.DB_PORT:1433};databaseName=${env.DB_DATABASE:keycloak};sendStringParametersAsUnicode=false;${env.JDBC_PARAMS:}",
    "driver-name" => "sqlserver",
    "flush-strategy" => "IdleConnections",
    "user-name" => expression "${env.DB_USER:keycloak}",
    "password" => expression "${env.DB_PASSWORD:password}",
    "check-valid-connection-sql" => "SELECT 1",
    "background-validation" => true,
    "background-validation-millis" => 60000L
}, {
    "operation" => "add",
    "driver-name" => "h2",
    "driver-major-version" => undefined,
    "driver-minor-version" => undefined,
    "driver-module-name" => "com.h2database.h2",
    "address" => [
        ("subsystem" => "datasources"),
        ("jdbc-driver" => "h2")
    ],
    "driver-xa-datasource-class-name" => "org.h2.jdbcx.JdbcDataSource"
}, {
    "operation" => "add",
    "driver-name" => "sqlserver",
    "driver-major-version" => undefined,
    "driver-minor-version" => undefined,
    "driver-module-name" => "com.microsoft.sqlserver.jdbc",
    "address" => [
        ("subsystem" => "datasources"),
        ("jdbc-driver" => "sqlserver")
    ],
    "driver-xa-datasource-class-name" => "com.microsoft.sqlserver.jdbc.SQLServerXADataSource"
}]: java.lang.RuntimeException: WFLYCTL0195: Interrupted awaiting transaction commit or rollback
    at org.jboss.as.controller@15.0.1.Final//org.jboss.as.controller.ParallelBootOperationStepHandler$ParallelBootTransactionControl.operationPrepared(ParallelBootOperationStepHandler.java:458)
    at org.jboss.as.controller@15.0.1.Final//org.jboss.as.controller.ModelController$OperationTransactionControl.operationPrepared(ModelController.java:131)
    at org.jboss.as.controller@15.0.1.Final//org.jboss.as.controller.AbstractOperationContext.executeDoneStage(AbstractOperationContext.java:874)
    at org.jboss.as.controller@15.0.1.Final//org.jboss.as.controller.AbstractOperationContext.processStages(AbstractOperationContext.java:805)
    at org.jboss.as.controller@15.0.1.Final//org.jboss.as.controller.AbstractOperationContext.executeOperation(AbstractOperationContext.java:468)
    at org.jboss.as.controller@15.0.1.Final//org.jboss.as.controller.ParallelBootOperationStepHandler$ParallelBootTask.run(ParallelBootOperationStepHandler.java:384)
    at org.jboss.threads@2.4.0.Final//org.jboss.threads.ContextClassLoaderSavingRunnable.run(ContextClassLoaderSavingRunnable.java:35)
    at org.jboss.threads@2.4.0.Final//org.jboss.threads.EnhancedQueueExecutor.safeRun(EnhancedQueueExecutor.java:1990)
    at org.jboss.threads@2.4.0.Final//org.jboss.threads.EnhancedQueueExecutor$ThreadBody.doRunTask(EnhancedQueueExecutor.java:1486)
    at org.jboss.threads@2.4.0.Final//org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1377)
    at java.base/java.lang.Thread.run(Thread.java:829)
    at org.jboss.threads@2.4.0.Final//org.jboss.threads.JBossThread.run(JBossThread.java:513)

我搜索了错误,我没有任何问题,关于防火墙或TCP端口没有设置正确,根据微软的第一个命令将设置TCP端口为1433
有没有人有过类似的经历,请帮助我。有没有人知道

u1ehiz5o

u1ehiz5o1#

您的MSSQL没有在Keycloak容器中的localhost上运行-因此DB_ADDR=localhost不正确。它正在您的主机上的localhost上运行。请为Keycloak容器使用主机网络--network host,则DB_ADDR的localhost将有效。请记住,默认情况下,容器中的localhost不是主机系统的localhost(除非您使用主机网络)。
推荐文档(也有其他选项如何排序它没有主机网络):https://docs.docker.com/network/

相关问题