Docker compose无效的卷目标路径:“.”装载路径必须是绝对路径

ig9co6j1  于 2023-05-22  发布在  Docker
关注(0)|答案(4)|浏览(91)

下面是我的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}

以下是我正在尝试执行的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}

我得到的错误为:
错误:for db无法为服务db创建容器:无效的卷规格“.”:无效的卷目标路径:“.”装载路径必须是绝对路径。

8aqjt8rx

8aqjt8rx1#

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

tvmytwxo

tvmytwxo2#

我有同样的错误消息,这是一个愚蠢的错误。我忘了在container目录/app上加上前导正斜杠
之前

volumes:
      - ./api/app:app

之后

volumes:
      - ./api/app:/app
mqkwyuun

mqkwyuun3#

有时只是一个额外的空间可能会导致问题(我的情况):不应该是这样的:

volumes:
      - ./api/app: /app

但是:

volumes:
      - ./api/app:/app
vom3gejh

vom3gejh4#

删除app之前的.将此更改为

volumes:
      - ./api:/app
      - ./app/node_modules

volumes:
      - ./api:/app
      - /app/node_modules

因为/app或您在中命名的工作目录是在/中创建的。

相关问题