docker --volumes-来自不挂载任何文件

时间:2017-01-20 20:06:32

标签: docker glusterfs

我有两个容器,其中一个我使用gluster文件系统将我需要的文件挂载到容器的mnt目录中,我在Dockerfile中使用VOLUME /mnt来共享卷。 我用这个运行这个容器:

docker run -d --cap-add SYS_ADMIN --device=/dev/fuse:/dev/fuse -e MOUNTPOINT="server1:test" -e TARGET="/mnt"  --name gluster gluster-client

我想在第二个容器中使用这个文件是一个nginx容器,所以我使用--volumes-from运行这个容器来使用那个共享卷,这就是我运行容器的方式:

docker run -it --volumes-from gluster  nginx sh

我的gluster容器工作正常,我的意思是我检查了mount目录(这里是/ mnt),我可以看到文件,但是在第二个容器中我是usig docker --volumes-从那里没有/ mnt目录中的文件,它似乎可以挂载目录但不能挂载这些目录中的文件,我该如何修复它?是因为我使用的是gluster还是什么?

gluster容器基于fedora,而nginx容器则基于alpine。

感谢您的帮助:)。

1 个答案:

答案 0 :(得分:1)

这可能是由于SELinux。尝试将第二个容器作为

运行
docker run -it --volumes-from gluster:z  nginx sh

来自docker run reference documentation

  

像SELinux这样的贴标系统需要放置适当的标签   卷内容安装到容器中。没有标签,安全性   系统可能会阻止进程在容器内运行   使用内容。默认情况下,Docker不会更改标签集   通过操作系统。

     

要更改容器上下文中的标签,您可以添加其中任何一个   两个后缀:z或:Z到音量安装。这些后缀告诉Docker   重新标记共享卷上的文件对象。 z选项告诉我   两个容器共享卷内容的Docker。结果是,   Docker使用共享内容标签标记内容。共享卷   标签允许所有容器读/写内容。 Z选项告诉我   Docker使用私有非共享标签标记内容。只有   当前容器可以使用私有卷。

关于相同的参数,您可以在Using Volumes with Docker can Cause Problems with SELinuxPractical SELinux and Containers找到更多详细信息。

编辑: 如果这不是原因,那么你的问题应该归功于glusterfs和数据容器。尝试使用命名卷。

将第一个容器中的VOLUME行更改为

VOLUME myVolume:/mnt

在第二个容器中,您可以使用--volumes-from代替--volume=myVolume

Docker Data Containers and Named VolumesDocker named volume explained上查看有关数据容器和命名卷的详情。