web-dev-qa-db-ja.com

Dockerが無効なボリューム宛先パスを作成しています:「。」マウントパスは絶対パスでなければなりません

以下は、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のコンテナを作成できません:無効なボリューム仕様 "。":無効なボリューム宛先パス: '。'マウントパスは絶対パスでなければなりません。

6
Shan Khan

テンプレートエンジンがないため、これは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について教えてくれてありがとう(もう一度)

6
Eugen Mayer