以下は、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のコンテナを作成できません:無効なボリューム仕様 "。":無効なボリューム宛先パス: '。'マウントパスは絶対パスでなければなりません。
テンプレートエンジンがないため、これは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について教えてくれてありがとう(もう一度)