Docker撰写无效的卷目标路径:'。'装载路径必须是绝对的

时间:2017-01-03 14:20:16

标签: docker docker-compose h2 dockerfile

以下是我的dockerfile,用于运行H2数据库: 我想为此创建一个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}

以下是我试图执行的码头工作:

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创建容器:无效的卷规范&#34;。&#34;:无效的卷目标路径:&#39;。&#39;装载路径必须是绝对的。

2 个答案:

答案 0 :(得分:5)

这在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上再次暗示我(再次)

答案 1 :(得分:0)

我有同样的错误信息,这是一个愚蠢的错误。我忘了在容器目录/ app

上加上前导斜线

之前

yaml

之后

volumes:
      - ./api/app:app