【问题标题】:docker --volumes-from not mounting any filesdocker --volumes-from 没有挂载任何文件
【发布时间】:2017-01-20 20:06:32
【问题描述】:

我有两个容器,在其中一个容器中,我使用 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 容器工作正常,我的意思是我检查了挂载目录(此处为 /mnt),我可以看到文件,但在我使用的第二个容器中 docker --volumes-from /mnt 目录中没有文件, 好像可以挂载目录但是不能挂载那些目录里面的文件,请问如何修复?,是因为我用的是gluster还是什么?

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

感谢您的帮助:)

【问题讨论】:

    标签: docker glusterfs


    【解决方案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
    

    在第二个容器中,您可以使用--volume=myVolume,而不是--volumes-from

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

    【讨论】:

    • 我试过了,但不幸的是它没有解决我的问题!
    • 在您发表评论后编辑答案。
    猜你喜欢
    • 2016-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-22
    • 1970-01-01
    • 1970-01-01
    • 2014-06-01
    相关资源
    最近更新 更多