java - 无法连接到 Dockerfile 中的 Wildfly

标签 java docker jboss wildfly keycloak

我正在创建一个自定义 Dockerfile,其中包含官方 keycloak docker 镜像的扩展。我想更改网络上下文并添加一些自定义提供程序。 这是我的 Dockerfile:

FROM jboss/keycloak:7.0.0

COPY startup-config.cli /opt/jboss/tools/cli/startup-config.cli

RUN /opt/jboss/keycloak/bin/jboss-cli.sh --connect --controller=localhost:9990 --file="/opt/jboss/tools/cli/startup-config.cli"

ENV KEYCLOAK_USER=admin
ENV KEYCLOAK_PASSWORD=admin

和startup-config.cli文件:

/subsystem=keycloak-server/:write-attribute(name=web-context,value="keycloak/auth")
/subsystem=keycloak-server/:add(name=providers,value="module:module:x.y.z.some-custom-provider")

不幸的是我收到这样的错误:

The controller is not available at localhost:9990: java.net.ConnectException: WFLYPRT0053: Could not connect to remote+http://localhost:9990. The connection failed: WFLYPRT0053: Could not connect to remote+http://localhost:9990. The connection failed: Connection refused
The command '/bin/sh -c /opt/jboss/keycloak/bin/jboss-cli.sh --connect --controller=localhost:9990 --file="/opt/jboss/tools/cli/startup-config.cli"' returned a non-zero code: 1

是否是本地主机无效的问题?我该如何引用管理API?

编辑:我也尝试使用 ENTRYPOINT 而不是 RUN,但在容器初始化期间发生了相同的错误。

最佳答案

您正在尝试让 Wildfly 在构建时加载您的自定义配置文件。问题是,当构建 Dockerfile 时,Wildfly 服务器没有运行。

Wildfly 实际上已经为您提供了有关自动加载自定义配置的信息,并且内置了对您想要执行的操作的支持。您只需将配置文件放在图像内的“神奇位置”即可。

您需要将配置文件放到此处:

/opt/jboss/startup-scripts/

这样你的Dockerfile看起来像这样:

FROM jboss/keycloak:7.0.0

COPY startup-config.cli /opt/jboss/startup-scripts/startup-config.cli

ENV KEYCLOAK_USER=admin
ENV KEYCLOAK_PASSWORD=admin

摘自keycloak documentation :

Adding custom script using Dockerfile

A custom script can be added by creating your own Dockerfile:

FROM keycloak 
COPY custom-scripts/ /opt/jboss/startup-scripts/

现在您可以简单地启动图像,keycloak 中的内置功能(实际上是 Wildfly 功能)将在该特定目录中查找配置,然后尝试加载它。

根据最终解决方案编辑评论:

虽然最初的答案解决了能够将配置传递到服务器的问题,但脚本内容仍然存在问题。启动容器时收到以下错误:

=========================================================================
Executing cli script: /opt/jboss/startup-scripts/startup-config.cli
No connection to the controller.
=========================================================================

问题出在 startup-config.cli 脚本中,其中缺少启动与 jboss 的连接所需的 jboss 命令 embed-server实例。还缺少关闭 stop-embedded-server 命令。有关以这种方式配置 jboss 的更多信息,请参阅此处的文档:CHAPTER 8. EMBEDDING A SERVER FOR OFFLINE CONFIGURATION

最终脚本:

embed-server --std-out=echo
/subsystem=keycloak-server/theme=defaults/:write-attribute(name=cacheThemes,value=false)
/subsystem=keycloak-server/theme=defaults/:write-attribute(name=cacheTemplates,value=false)
stop-embedded-server

关于java - 无法连接到 Dockerfile 中的 Wildfly,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58929318/

相关文章:

java - 在 jboss 上部署 struts 应用程序

java - 是否有使用不同应用服务器测试应用程序的技巧或最佳实践?

java - JSP for 循环与数据库结果

java - Nifty GUI "onClickRepeat"无法在 JME3 中的 "controlDefinition"中工作

java - Maven 存储库中 4.1.1 中的 spring-security-web 在哪里?

docker - Mercure Docker 由于忽略 docker-compose 中的 JWT_KEY 而导致 JWT 签名无效

docker - 如何让 `cos-extensions install gpu`在Google Cloud VM上运行?

node.js - PM2 不会在 Docker 内部启动

java - JBoss war 文件部署问题

java - 带有 jax-rs 的 Cookie 域和路径