2017-01-03 12 views
2

以下は、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} 

は私が実行しようとしていますドッキングウィンドウのコンです:

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} 

Imがエラーを取得して:あなたはので、これはちょうど、作曲ファイルでは許可されません

ERROR: for db Cannot create container for service db: Invalid volume spec ".": Invalid volume destination path: '.' mount path must be absolute.

+0

これはうまくいかないでしょう - サービスごとに複数の 'command'エントリを持つことはできません。おそらくDockerファイルを使い続け、Docker Composeの 'build'オプションを使ってそれを参照したいと思うかもしれません:https://docs.docker.com/compose/compose-file/#/build – nwinkler

+0

@nwinkler h2 dockerfileをdocker composeに変換しますか? –

+0

docker-composeはドッカーの代わりではなく、ドッカーによって構築されたドッカー画像を実行するためのものです。最初にドッカーで構築する必要があります。 – YOU

答えて

3

テンプレートエンジンがありません。

それは自動的に(匿名ボリューム)に行われますので、あなたは

volumes: 
     - /opt/h2-data 

を定義する必要はありません。あなたが持っているしたい場合は名前のボリュームは

volumes: 
     - myname:/opt/h2-data 

を使用するか、ホストがマウント

volumes: 
     - /path/on/the/host:/opt/h2-data 

だから、$ {DATA_DIR}はコンファイル内(ENVから)ボリュームに展開されていません。

が更新

あり、これを提供する牧場主、コンのような方言がありますが、一般的には不可能である:私は何とかDockerfile /ドッキングウィンドウ-compose.ymlファイルを混合するのでは私の答えを更新しました。 Dockerfileは変数として使われるだけなので、意味があります。 @Bmitch(もう一度)について私に助言してくれてありがとう

+0

Dockerfile VOLUMEコマンドで変数の拡張を許可する必要があります。しかし、作成ファイルのために、あなたにスポットがあります。 Ref:https://docs.docker.com/engine/reference/builder/#environment-replacement – BMitch

+0

ボリュームを削除しましたが、メインクラスのorg.h2.tools.Serverが見つかりませんでしたドッカーが作成する、それはdockerFileで動作していますが、なぜドッカーのライブラリを受け付けないのですか? –

+0

@ShanKhanlook私の答えで、私はBMitchのアドバイスのためにそれを修正した、私はひどくそれを混在させた。 docker-composeで提供されていないもの、rancher-composeのような方言のみで提供されるものはhttps://docs.rancher.com/rancher/v1.3/en/cattle/rancher-compose/environment-interpolation/を参照してください。 –

関連する問題