有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java无法连接到Dockerfile中的Wildfly

我正在创建一个带有扩展名的自定义Dockerfile,用于官方KeyClope docker映像。我想更改web上下文并添加一些自定义提供程序。 这是我的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

和启动配置。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,但是在容器初始化期间发生了相同的错误


共 (2) 个答案

  1. # 1 楼答案

    您正试图让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/
    

    现在,您只需启动映像,keydepate中的内置功能(Wildfly功能)将在该spedic目录中查找配置,然后尝试加载它

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

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

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

    问题在于startup-config.cli脚本中缺少jboss命令embed-server,需要启动到jboss实例的连接。还缺少关闭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
    
  2. # 2 楼答案

    构建Docker映像时,WildFly管理界面不可用。您唯一的选择是在嵌入式模式下启动CLI,如这里所讨论的Running CLI commands in WildFly Dockerfile。 更高级的方法包括使用S2I安装脚本触发CLI命令