如何使用 CLI 将模块添加到 Wildfly

How to add module to Wildfly using CLI

我正在尝试使用 postgres 数据源创建 Wildfly docker 图像。

当我构建 docker 文件时,当我尝试安装 postgres 模块时,它总是失败并显示权限被拒绝。

我的 docker 文件看起来是这样的:

FROM wildflyext/wildfly-camel

RUN /opt/jboss/wildfly/bin/add-user.sh admin admin --silent
ADD postgresql-9.4-1201.jdbc41.jar /tmp/
ADD config.sh /tmp/
ADD batch.cli /tmp/
RUN /tmp/config.sh

调用以下内容:

#!/bin/bash

JBOSS_HOME=/opt/jboss/wildfly
JBOSS_CLI=$JBOSS_HOME/bin/jboss-cli.sh
JBOSS_MODE=${1:-"standalone"}
JBOSS_CONFIG=${2:-"$JBOSS_MODE.xml"}

function wait_for_wildfly() {
  until `$JBOSS_CLI -c "ls /deployment" &> /dev/null`; do
    sleep 10
  done
}

echo "==> Starting WildFly..."
$JBOSS_HOME/bin/$JBOSS_MODE.sh -c $JBOSS_CONFIG > /dev/null &

echo "==> Waiting..."
wait_for_wildfly

echo "==> Executing..."
$JBOSS_CLI -c --file=`dirname "[=11=]"`/batch.cli  --connect

echo "==> Shutting down WildFly..."
if [ "$JBOSS_MODE" = "standalone" ]; then
  $JBOSS_CLI -c ":shutdown"
else
  $JBOSS_CLI -c "/host=*:shutdown"
fi

batch

module add --name=org.postgresql --resources=/tmp/postgresql-9.4-1201.jdbc41.jar --dependencies=javax.api,javax.transaction.api
/subsystem=datasources/jdbc-driver=postgresql:add(driver-name=postgresql,driver-module-name=org.postgresql,driver-xa-datasource-class-name=org.postgresql.xa.PGXADataSource)

run-batch

构建时的输出是:

==> Starting WildFly... ==> Waiting... ==> Executing... Failed to locate the file on the filesystem copying /tmp/postgresql-9.4-1201.jdbc41.jar to /opt/jboss/wildfly/modules/org/postgresql/main/postgresql-9.4-1201.jdbc41.jar: /tmp/postgresql-9.4-1201.jdbc41.jar (Permission denied)

需要什么权限,我在哪里设置权限?

谢谢

jboss 用户(来自父映像的用户)似乎无法读取 JAR 文件。 postgresql-9.4-1201.jdbc41.jar 添加在 root 用户下 - 在 this GitHub discussion.

中查找详细信息

你可以

  • 要么在将 JAR 文件添加到图像之前添加权限
  • 或者在添加后对镜像中的JAR文件添加权限
  • 或更改图像中文件的所有权

最简单的解决方案可能是第一个。其他 2 个解决方案还需要将用户切换到 root(dockerfile 中的 USER root),然后再切换回 jboss.

这里有一个建议:像这样制作一个 cli 文件:

connect
module add --name=sqlserver.jdbc --resources=@INSTALL_FOLDER@/libext/jtds-1.3.1.jar --dependencies=javax.api,javax.transaction.api
/subsystem=datasources/jdbc-driver=sqlserver:add(driver-module-name=sqlserver.jdbc,driver-name=sqlserver,driver-class-name=@JDBC_DRIVER@)
/subsystem=datasources/data-source=@DATASOURCENAME@:add(jndi-name=java:jboss/@JNDI_NAME@,enabled="true",use-java-context="true",driver-name=sqlserver,connection-url="@JDBC_URL@",user-name=@JDBC_USER@,password=@JDBC_PASSWORD@,validate-on-match=true,background-validation=true)

用我们自己的值替换@VAR@...它应该可以工作! 请注意 JBOSS/Wildfly 10 默认情况下相对考虑 jar --resources 但 wildfly 8 认为绝对路径这可能会让您感到奇怪! ;-)

干杯!