【问题标题】:Docker compose Invalid volume destination path: '.' mount path must be absoluteDocker compose 卷目标路径无效:“。”挂载路径必须是绝对的
【发布时间】:2017-05-17 16:01:01
【问题描述】:

以下是用于运行 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}

我收到错误:

错误:对于 db 无法为服务 db 创建容器:无效的卷规范“。”:无效的卷目标路径:“。”挂载路径必须是绝对路径。

【问题讨论】:

  • 这行不通 - 每个服务不能有多个 command 条目。您可能想继续使用您的 Dockerfile,然后使用 Docker Compose 的 build 选项来引用它:docs.docker.com/compose/compose-file/#/build
  • @nwinkler 你能告诉我如何将 h2 dockerfile 转换为 docker compose 吗?
  • docker-compose 不是 docker 的替代品,而是运行 docker 构建的 docker 镜像。你需要先用 docker 构建它。

标签: docker docker-compose h2 dockerfile


【解决方案1】:

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

【讨论】:

  • Dockerfile VOLUME 命令应该允许变量扩展。但是对于撰写文件,您就对了。参考:docs.docker.com/engine/reference/builder/…
  • 好的,谢谢,我已经删除了卷,但它说在 docker compose 中找不到或加载主类 org.h2.tools.Server,它在 dockerFile 中工作,但为什么它不接受库在 docker compose 中?
  • @ShanKhan 看看我的回答,由于 BMitch 的建议,我更正了它,我只是把它搞混了。你想要的不是 docker-compose 提供的,只有像 rancher-compose 这样的方言,见docs.rancher.com/rancher/v1.3/en/cattle/rancher-compose/…
【解决方案2】:

我收到了同样的错误信息,这是一个愚蠢的错误。我忘了在容器目录 /app 上加上前导斜杠

之前

volumes:
      - ./api/app:app

之后

volumes:
      - ./api/app:/app

【讨论】:

    【解决方案3】:

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

    volumes:
          - ./api/app: /app
    

    但是:

    volumes:
          - ./api/app:/app
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-10-25
      • 2022-12-15
      • 1970-01-01
      • 2021-07-19
      • 1970-01-01
      • 1970-01-01
      • 2018-08-07
      相关资源
      最近更新 更多