Docker compose Invalid volume destination path: '.' mount path must be absolute

Following is my dockerfile that works to run the H2 Database:
I want to create a docker compose file for this.

FROM klousiaj/oracle-java:7.79
MAINTAINER J.P. Klousia <klousiaj>

ENV DOWNLOAD http://www.h2database.com/h2-2016-10-31.zip
ENV DATA_DIR /opt/h2-data

RUN curl ${DOWNLOAD} -o h2.zip \
    && unzip h2.zip -d /opt/ \
    && rm h2.zip \
    && mkdir -p ${DATA_DIR}

EXPOSE 8082 9092

CMD java -cp /opt/h2/bin/h2*.jar org.h2.tools.Server \
    -web -webAllowOthers -webPort 8082 \
    -tcp -tcpAllowOthers -tcpPort 9092 \
    -baseDir ${DATA_DIR}

VOLUME ${DATA_DIR}

Following is the docker compose i am trying to perform:

  • How to run tests on CentOS 7 with Travis-CI?
  • Docker support - Google App Engine (Java)
  • Minimize docker container size built with nix
  • Generating new (not renewed) SSL Certificates with “letsencrypt certonly” in non-interactive mode
  • How do we set docker containers to restart on reboot and on-failure?
  • Reset Docker Machine to run Docker commands on my local machine
  • version: '2'
    
    
    services:
        db:
            image: klousiaj/oracle-java:7.79
            environment: 
                DOWNLOAD: http://www.h2database.com/h2-2016-10-31.zip
                DATA_DIR: /opt/h2-data
            command: curl ${DOWNLOAD} -o h2.zip \ && unzip h2.zip -d /opt/ \ && rm h2.zip \ && mkdir -p ${DATA_DIR}
            expose: 
                - "8082-9092"
            command: java -cp /opt/h2/bin/h2*.jar org.h2.tools.Server \ -web -webAllowOthers -webPort 8082 \ -tcp -tcpAllowOthers -tcpPort 9092 \ -baseDir ${DATA_DIR}
            volumes: 
                - ${DATA_DIR}
    

    Im getting error as :

    ERROR: for db Cannot create container for service db: Invalid volume spec “.”: Invalid volume destination path: ‘.’ mount path must be absolute.

  • Not able to see file after creating it using docker command and committing the changes
  • Run a docker command from Groovy script
  • Nodemon Doesn't Restart in Windows Docker Environment
  • How best to connect containers within Docker
  • How to programmatically monitor if a docker container exited?
  • docker: Installing application code from git in docker image
  • One Solution collect form web for “Docker compose Invalid volume destination path: '.' mount path must be absolute”

    This is just not allowed in the Compose file, since you do not have a template engine thee.

    You will not need to define

    volumes: 
            - /opt/h2-data
    

    Since that will be done automatically (anonymous volume). If you want to have a named volume use

    volumes: 
            - myname:/opt/h2-data
    

    or a host mount

    volumes: 
            - /path/on/the/host:/opt/h2-data
    

    So ${DATA_DIR} is not expaneded in the volumes ( from the ENV ) in a compose file. There are dialects like rancher-compose providing this, but in general that is not possible

    UPDATED: Updated my answer since i somehow mixed the Dockerfile/docker-compose.yml file. It makes sense in the Dockerfile, since it is just used as a variable. Thank you forhinting me on that @Bmitch (once again)

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