Docker撰写无效的卷目标路径: '.' mount path must be absolute

标签 docker docker-compose h2 dockerfile

以下是我的可运行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/

相关文章:

Docker - 服务的别名 DNS 条目 (CNAME)

python - Docker 为 Airflow 2 编写文件(版本 2.0.0)

java - JPA Criteria select 有两个子查询/连接

java - 如何将对象插入到h2

java - Spring MyBatis关系映射问题

docker - 如何在没有互联网和内网 yum 存储库的情况下安装 docker-ce?

docker - 无法在 Ubuntu 18.04 LTS 上运行 pgadmin4 docker

Docker-compose 与 nginx 模板一起传递全局变量。向我的撰写添加命令会破坏此功能

docker - 用于运行 nodejs 应用程序的 2 种 Dockerfile 之间的区别

docker - 使用Linux grep检查docker-compose服务是否健康