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/wildfly
和docker 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。