How to add module to Wildfly using CLI

I’m trying to create a Wildfly docker image with a postgres datasource.

When I build the dockerfile it always fails with Permission Denied when I try to install the postgres module.

  • pip cannot install websocket-server python packge
  • Attempting to use docker-client from Spotify and am getting various errors
  • Elasticsearch Docker stop seems to ignore SIGKILL
  • How to connect with JMX from host to Docker container in Docker machine?
  • docker blockio can not monitor when using dd to test
  • Passing Different Arguments When Running Docker Image Multiple Times
  • My dockerfile looks look this:

    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
    

    Which calls the following:

    #!/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
    

    And

    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
    

    The output when building is:

    ==> 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)

    What permissions are required, and where do I set the permission(s)?

    Thanks

  • Docker container: lsmod not found
  • 501 Not Implemented when pushing to Artifactory Docker repository
  • Docker with Nginx - Https not working
  • Kubernetes Pod Creation Speed
  • How can RabbitMQ clusters recognise Docker's container restarts?
  • Multiple Docker containers, same image, different config
  • 2 Solutions collect form web for “How to add module to Wildfly using CLI”

    It seems the JAR file is not readable by the jboss user (the user comming from parent image). The postgresql-9.4-1201.jdbc41.jar is added under the root user – find details in this GitHub discussion.

    You could

    • either add permissions to JAR file before adding it to the image
    • or add permissions to JAR file in the image after the adding
    • or change ownership of the file in the image

    The simplest solution could be the first one. The other 2 solutions need also switching user to root (USER root in dockerfile) and then back to jboss.

    Here a advice : make a cli file like this :

    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)
    

    replace @VAR@ by our own value… and It should work!
    Be caution than JBOSS/Wildfly 10 think relatively for jar –resources by default but wildfly 8 think absolute path this could make you weird ! 😉

    cheers!

    Docker will be the best open platform for developers and sysadmins to build, ship, and run distributed applications.