Docker Volume指向Dockerfile中的主机目录

时间:2017-11-03 09:41:45

标签: docker dockerfile

我有以下Dockerfile:

FROM jboss/wildfly
USER jboss
RUN mkdir -p /opt/jboss/wildfly/standalone/log
VOLUME /opt/jboss/wildfly/standalone/log 
CMD /bin/bash
# CMD true

此结果图像以docker run -ti --name=data_volume data/volume开头。下一个Dockerfile

FROM jboss/wildfly
RUN sed -i 's|<file relative-to="jboss.server.log.dir" 
    path="server.log"/>|\<file relative-to="jboss.server.log.dir" 
    path="\${jboss.host.name}-server.log"/\>|' 
    /opt/jboss/wildfly/standalone/configuration/standalone.xml

覆盖生成的jboss的日志记录,以记录日志目录中的&#34; servername&#34; -server.log。当我用docker run -ti --name=wild-01 --volumes-from=data_volume my/wildflydocker run -ti --name=wild-02 --volumes-from=data_volume my/wildfly启动生成的图像时,我的data_colume容器中有两个日志文件。太好了。

我想将我的卷指向主机上的目录,例如。的/ var /日志/ wildfly。

如何在Dockerfiles中实现此功能,而不是在运行data/volume时使用-v参数

提前多多感谢

2 个答案:

答案 0 :(得分:1)

在dockerfiles内部,您只能在/var/lib/docker/volumes中定义卷。这是因为每个主机可能与另一个主机不同。

Docker使用/var/lib/docker作为&#34;泊坞区&#34;它存储所有与docker相关的数据。它是每个主机上保证的目录,因为它是在安装时创建的。

如果要在dockerfile中指出一个卷,让我们对/home/mbieren/docker_vol说,在不同的主机上执行时,该图像会导致多个错误,因为该目录不存在且用户可能没有足够的权限来创建它。

Docker解决了这个问题,不允许在dockerfile中设置自定义挂载路径。

答案 1 :(得分:0)

  

我想将我的卷指向主机上的目录,例如。的/ var /日志/ wildfly。

从Dockerfile中删除所有卷的提示...使用

启动容器
docker run -d -v /var/log/wildfly:/var/log/wildfly  your-image-name

然后在你的代码中引用正常路径

/var/log/wildfly

使用docker run -ti启动容器的语法使容器shell具有交互性,而-d是将其作为后台运行的守护程序进行旋转的正常模式