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
,但是在容器初始化期间发生了相同的错误
# 1 楼答案
您正试图让Wildfly在构建时加载您的自定义配置文件。问题是,在构建
Dockerfile
时,Wildfly服务器没有运行Wildfly实际上已经介绍了自动加载自定义配置的相关内容,它内置了对您想要做的事情的支持。您只需将配置文件放在图像中的“神奇位置”
您需要将配置文件放在此处:
/opt/jboss/startup-scripts/
所以你的
Dockerfile
看起来像这样:摘自keycloak documentation
现在,您只需启动映像,keydepate中的内置功能(Wildfly功能)将在该spedic目录中查找配置,然后尝试加载它
使用最终解决方案编辑评论:
虽然最初的答案解决了将配置传递给服务器的问题,但脚本的内容仍然存在一个问题。启动容器时收到以下错误:
问题在于
startup-config.cli
脚本中缺少jboss命令embed-server
,需要启动到jboss实例的连接。还缺少关闭stop-embedded-server
命令。有关以这种方式配置jboss的更多信息,请参见此处的文档:CHAPTER 8. EMBEDDING A SERVER FOR OFFLINE CONFIGURATION最后的剧本:
# 2 楼答案
构建Docker映像时,WildFly管理界面不可用。您唯一的选择是在嵌入式模式下启动CLI,如这里所讨论的Running CLI commands in WildFly Dockerfile。 更高级的方法包括使用S2I安装脚本触发CLI命令