如何使用 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 认为绝对路径这可能会让您感到奇怪! ;-)
干杯!
我正在尝试使用 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 认为绝对路径这可能会让您感到奇怪! ;-)
干杯!