Docker Volume指向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的日志logging以便在日志logging目录中logging到“servername”-server.log。 当我使用docker run -ti --name=wild-01 --volumes-from=data_volume my/wildfly启动生成的映像时, docker run -ti --name=wild-01 --volumes-from=data_volume my/wildflydocker run -ti --name=wild-01 --volumes-from=data_volume my/wildfly docker run -ti --name=wild-02 --volumes-from=data_volume my/wildfly我在我的data_colume容器中有两个日志文件。 好极了。

我想指出我的卷到主机上的目录,例如。 在/ var /日志/ wildfly。

在运行data/volume时,如何在Dockerfiles中实现此操作,而不是-v参数

非常感谢

我想指出我的卷到主机上的目录,例如。 在/ var /日志/ wildfly。

从你的Dockerfile中删除所有提到的卷…使用启动你的容器

 docker run -d -v /var/log/wildfly:/var/log/wildfly your-image-name 

那么在你的代码中只需引用正常的path

 /var/log/wildfly 

使用docker run -ti启动容器的语法使得容器shell是交互式的,而-d是将其作为在后台运行的守护程序来旋转的普通模式

在dockerfiles里,你只能在/var/lib/docker/volumes docker /var/lib/docker/volumes volumes中定义/var/lib/docker/volumes 。 这是因为每个主机都可以不同于其他主机。

Docker使用/var/lib/docker作为“docker area”,它存储所有docker相关的数据。 这是在每个主机上保证的目录,因为它是在安装时创build的。

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

Docker绕过这个问题,不允许在dockerfile中设置自定义的挂载path。