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

我正在尝试用postgres数据源创build一个Wildfly docker镜像。

当我构builddockerfile时,它总是失败,当我尝试安装postgres模块时,权限被拒绝。

我的dockerfile看起来像这样:

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 "$0"`/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 

build筑时的输出是:

==>启动WildFly … ==>正在等待… ==>正在执行…无法find文件系统上的文件,将/tmp/postgresql-9.4-1201.jdbc41.jar复制到/ opt / jboss / wildfly /modules/org/postgresql/main/postgresql-9.4-1201.jdbc41.jar:/tmp/postgresql-9.4-1201.jdbc41.jar(Permission denied)

什么权限是必需的,我在哪里设置权限?

谢谢

看来JAR文件不能被jboss用户读取(用户从父映像中读取)。 在root用户下添加postgresql-9.4-1201.jdbc41.jar – 在这个GitHub讨论中查找细节。

你可以

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

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

这里有一个build议:做一个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十分小心,默认情况下是jar – 资源,但wildfly 8认为绝对path,这可能会让你感到奇怪! 😉

干杯!