如何使用CLI

时间:2015-09-01 13:21:08

标签: java postgresql docker wildfly wildfly-8

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

当我构建dockerfile时,当我尝试安装postgres模块时,它总是以Permission Denied失败。

我的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

构建时的输出是:

  

==>启动WildFly ......   ==>等候...   ==>执行...无法在文件系统上找到文件,将/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(权限被拒绝)

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

由于

2 个答案:

答案 0 :(得分:3)

jboss用户(来自父图像的用户)似乎无法读取JAR文件。 postgresql-9.4-1201.jdbc41.jar添加在root用户下 - 在this GitHub discussion中查找详细信息。

你可以

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

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

答案 1 :(得分:1)

这里有一个建议:制作一个这样的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认为绝对路径可能会让你觉得奇怪! ; - )

喝彩!