Reputation: 10319
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:
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.
Upvotes: 20
Views: 88278
Reputation: 1
The error i encountered indicates that the mount path for the volume in the Docker configuration is incorrect. The mount path must be an absolute path. Here’s how you can fix it: step1:Edit the docker-compose.yml File: step2:Update the mount path to be absolute
for avoiding any hustle Restart Docker Compose
Upvotes: -1
Reputation: 12540
My error was that the path had a colon as part of it.
To make it work, I enclosed the path with single quotes:
volumes:
- type: bind
source: './path-with-colon:2.4.10-server/bundle'
target: '/usr/local/bundle'
Upvotes: 0
Reputation: 323
Remove the .
before app
Change this
volumes:
- ./api:/app
- ./app/node_modules
to
volumes:
- ./api:/app
- /app/node_modules
Because the /app
or whatever you named your working directory in created in /
.
Upvotes: 11
Reputation: 21
I got the same problem and inside my docker-compose.yaml I got the code inside the volumes which is given below:
---Before(I got the error message in the terminal)---
volumes: - ./api:/app - ./app/node_modules
---After(The problem is fixed)---
volumes: - ./api:/app - /app/node_modules
Upvotes: 2
Reputation: 89
Sometimes just an extra space can cause the problem (my case): Shouldn't be like that:
volumes:
- ./api/app: /app
but :
volumes:
- ./api/app:/app
Upvotes: 4
Reputation: 1700
I had the same error message, it was a silly mistake. I forgot to put the leading forward slash on container directory /app
Before
volumes:
- ./api/app:app
After
volumes:
- ./api/app:/app
Upvotes: 13
Reputation: 9896
This is just not allowed in the Compose file, since you do not have a template engine there.
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 expanded 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 for hinting me on that @Bmitch (once again)
Upvotes: 18