无法连接到 Dockerfile 中的 Wildfly

dev*_*123 3 java jboss docker wildfly keycloak

我正在创建一个带有官方 keycloak docker 图像扩展的自定义 Dockerfile。我想更改网络上下文并添加一些自定义提供程序。这是我的 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
Run Code Online (Sandbox Code Playgroud)

和 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")

Run Code Online (Sandbox Code Playgroud)

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

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
Run Code Online (Sandbox Code Playgroud)

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

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

And*_*zen 6

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

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
Run Code Online (Sandbox Code Playgroud)

摘自keycloak 文档

使用 Dockerfile 添加自定义脚本

可以通过创建自己的 Dockerfile 来添加自定义脚本:

FROM keycloak 
COPY custom-scripts/ /opt/jboss/startup-scripts/
Run Code Online (Sandbox Code Playgroud)

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

使用最终解决方案从评论中编辑:

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

=========================================================================
Executing cli script: /opt/jboss/startup-scripts/startup-config.cli
No connection to the controller.
=========================================================================
Run Code Online (Sandbox Code Playgroud)

问题出在startup-config.cli脚本中,embed-server缺少jboss 命令,需要启动与 jboss 实例的连接。还缺少关闭stop-embedded-server命令。有关以这种方式配置 jboss 的更多信息,请参见此处的文档:第 8 章为离线配置嵌入服务器

最终脚本:

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
Run Code Online (Sandbox Code Playgroud)