下面是我的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创建容器:无效的卷规格“.”:无效的卷目标路径:“.”装载路径必须是绝对路径。
4条答案
按热度按时间8aqjt8rx1#
这在Compose文件中是不允许的,因为那里没有模板引擎。
您将不需要定义
因为这将自动完成(匿名卷)。如果希望命名卷使用
或主机装载
因此,${DATA_DIR}不会在合成文件的卷(来自ENV)中展开。有像rancher-compose这样的方言提供了这种功能,但一般来说这是不可能的
**更新:**更新了我的答案,因为我不知何故混合了Dockerfile/docker-compose.yml文件。它在Dockerfile中是有意义的,因为它只是用作变量。谢谢你在@Bmitch上给我暗示(再一次)
tvmytwxo2#
我有同样的错误消息,这是一个愚蠢的错误。我忘了在container目录/app上加上前导正斜杠
之前
之后
mqkwyuun3#
有时只是一个额外的空间可能会导致问题(我的情况):不应该是这样的:
但是:
vom3gejh4#
删除
app
之前的.
将此更改为到
因为
/app
或您在中命名的工作目录是在/
中创建的。