docker组成无效的卷目的地path:'。' 安装path必须是绝对的

以下是我的dockerfile工作来运行H2数据库:我想为此创build一个docker撰写文件。

FROM klousiaj/oracle-java:7.79 MAINTAINER JP 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工作:

 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} 

我得到错误:

错误:for db无法为服务db创build容器:无效的卷spec“。”:无效的卷目标path:'。' 安装path必须是绝对的。

这在撰写文件中是不允许的,因为你没有模板引擎。

你不需要定义

 volumes: - /opt/h2-data 

因为这将自动完成(匿名量)。 如果你想有一个命名的卷使用

 volumes: - myname:/opt/h2-data 

或主机安装

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

因此$ {DATA_DIR}不会在构成文件中的卷(来自ENV)中展开。 像牧场主这样的方言提供这种方式,但一般来说这是不可能的

更新:更新我的答案,因为我以某种方式混合Dockerfile / docker-compose.yml文件。 它在Dockerfile中是有意义的,因为它只是作为一个variables使用。 谢谢你在@Bmitch(再次)暗示我