Sha*_*han 4 h2 docker dockerfile docker-compose
以下是我的可运行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}
Run Code Online (Sandbox Code Playgroud)
以下是我正在尝试执行的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}
Run Code Online (Sandbox Code Playgroud)
我收到错误消息:
错误:对于db无法为服务db创建容器:无效的卷规范“。”:无效的卷目标路径:'。' 安装路径必须是绝对的。
nil*_*loc 12
我有同样的错误消息,这是一个愚蠢的错误。我忘记在容器目录 /app 上放置前导斜杠
前
volumes:
- ./api/app:app
Run Code Online (Sandbox Code Playgroud)
后
volumes:
- ./api/app:/app
Run Code Online (Sandbox Code Playgroud)
只是在Compose文件中是不允许的,因为那里没有模板引擎。
您将不需要定义
volumes:
- /opt/h2-data
Run Code Online (Sandbox Code Playgroud)
因为这将自动完成(匿名卷)。如果要命名卷使用
volumes:
- myname:/opt/h2-data
Run Code Online (Sandbox Code Playgroud)
或主机挂载
volumes:
- /path/on/the/host:/opt/h2-data
Run Code Online (Sandbox Code Playgroud)
因此,$ {DATA_DIR}不会在组合文件的卷中(从ENV扩展)。有一些像rancher-compose这样的方言提供了这一点,但总的来说这是不可能的
更新:更新了我的答案,因为我以某种方式混合了Dockerfile / docker-compose.yml文件。这在Dockerfile中是有意义的,因为它只是用作变量。谢谢您对我的@Bmitch提示(再次)
去掉.之前的app
更改这个
volumes:
- ./api:/app
- ./app/node_modules
Run Code Online (Sandbox Code Playgroud)
到
volumes:
- ./api:/app
- /app/node_modules
Run Code Online (Sandbox Code Playgroud)
因为/app或任何您命名的工作目录在 中创建/。