以下是我的可运行H2数据库的dockerfile:
我想为此创建一个docker compose文件。
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}
以下是我正在尝试执行的docker compose:
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}
我收到错误消息:
ERROR: for db Cannot create container for service db: Invalid volume spec ".": Invalid volume destination path: '.' mount path must be absolute.
最佳答案
只是在Compose文件中是不允许的,因为那里没有模板引擎。
您将不需要定义
volumes:
- /opt/h2-data
因为这将自动完成(匿名卷)。如果要命名卷使用
volumes:
- myname:/opt/h2-data
或主机挂载
volumes:
- /path/on/the/host:/opt/h2-data
因此$ {DATA_DIR}不会在组合文件的卷中(从ENV扩展)。有一些像rancher-compose这样的方言提供了这一点,但总的来说这是不可能的
更新:更新了我的答案,因为我以某种方式混合了Dockerfile/docker-compose.yml文件。这在Dockerfile中是有意义的,因为它只是用作变量。谢谢您对我的@Bmitch提示(再次)
关于Docker撰写无效的卷目标路径: '.' mount path must be absolute,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41445579/