【问题标题】:what is 'z' flag in docker container's volumes-from option?docker容器的volumes-from选项中的'z'标志是什么?
【发布时间】:2016-02-05 07:06:40
【问题描述】:

在浏览 docker 文档时,我遇到了 docker run 命令的 volumes-from (https://docs.docker.com/engine/reference/commandline/run/) 选项。 我不明白ro, rw, and z 提供的选项之间的区别-
$ docker run --volumes-from ba8c0c54f0f2:ro -i -t ubuntu pwd
在上述命令中,ro 选项被替换为z。如果有人探讨使用这些选项的差异,我将不胜感激。

【问题讨论】:

标签: docker


【解决方案1】:

两个后缀 :z 或 :Z 可以添加到卷挂载中。这些后缀告诉 Docker 重新标记共享卷上的文件对象。 'z' 选项告诉 Docker 卷内容将在容器之间共享。 Docker 将使用共享内容标签标记内容。共享卷标签允许所有容器读/写内容。 “Z”选项告诉 Docker 使用私有非共享标签标记内容。

https://github.com/rhatdan/docker/blob/e6473011583967df4aa5a62f173fb421cae2bb1e/docs/sources/reference/commandline/cli.md

如果您使用 selinux,您可以添加 z 或 Z 选项来修改要挂载到容器中的主机文件或目录的 selinux 标签。这会影响主机本身的文件或目录,并可能产生 Docker 范围之外的后果。

z 选项表示绑定挂载内容在多个容器之间共享。 Z 选项表示绑定挂载内容是私有的和非共享的。 使用这些选项时要格外小心。使用 Z 选项绑定挂载系统目录(例如 /home 或 /usr)会使您的主机无法运行,您可能需要手动重新标记主机文件。

$ docker run -d \ -它 \ --名称开发测试\ -v "$(pwd)"/目标:/app:z \ nginx:最新的

https://docs.docker.com/storage/bind-mounts/#configure-bind-propagation

【讨论】:

  • 好的。这意味着如果我这样使用 - $ docker run --volumes-from ba8c0c54f0f2:z -i -t ubuntu pwd,那么暴露的卷将可用于共享其他容器。我是对的 amit23comp 吗?
  • 但这到底是什么意思?如果没有“z”后缀,则不会共享卷内容? “Docker 将使用共享内容标签标记内容”是什么意思?
  • 目前还不清楚这些选项如何影响容器,也许一些例子会有所帮助。
  • docker-compose 的类似选项是什么
【解决方案2】:
docker run --volumes-from a64f10cd5f0e:z -i -t rhel6 bin/bash

我已经测试过了,我已经安装在一个容器中,然后从那个容器安装到另一个新容器。它带有 rw 选项

【讨论】:

    【解决方案3】:

    我做了以下观察:

    # docker run --rm -ti -v /host/path/to/flyway/scripts:/flyway/sql:z --entrypoint '' flyway/flyway ls -l /flyway/sql
    total 0
    
    # docker run --rm -ti -v /host/path/to/flyway/scripts:/flyway/sql --entrypoint '' flyway/flyway ls -l /flyway/sql
    ls: cannot open directory '/flyway/sql': Permission denied
    

    因此,在这种情况下,容器仅在设置了:z 时才起作用。在这台主机上,安装了 SELinux。如果不是这种情况,:z 对我来说没有可识别的效果。

    除了:z,可以在主机文件夹上使用chcon 来更改此权限:

    # chcon -t svirt_sandbox_file_t /host/path/to/flyway/scripts
    
    # docker run --rm -ti -v /host/path/to/flyway/scripts:/flyway/sql:z --entrypoint '' flyway/flyway ls -l /flyway/sql
    total 0
    
    # docker run --rm -ti -v /host/path/to/flyway/scripts:/flyway/sql --entrypoint '' flyway/flyway ls -l /flyway/sql
    total 0
    

    【讨论】:

      【解决方案4】:

      通过我机器上的测试,-z 允许您与另一个容器共享内容。假设这张图片:

      FROM alpine
      RUN mkdir -p /var/www/html \
          && echo "foo" > /var/www/html/index.html
      

      让我们构建它并标记为 test-z

      $ docker build . -t test-z
      

      现在创建并运行名为 testing-ztest-z 容器,将卷 test-vol 映射到 / var/www/html 并添加 z 修饰符

      $ docker run \
          --name testing-z \
          --volume test-vol:/var/www/html:z \
          -d test-z tail -f /dev/null
      

      testing-z 中的 /var/www/html 的内容可以通过使用 --volumes-from 从其他容器中访问> 标志,如下所示:

      $ docker run --rm --volumes-from testing-z -it nginx sh
      # cat /var/www/html/index.html
      foo
      

      Obs.:我正在运行 Docker 版本 19.03.5-ce,构建 633a0ea838

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-06-01
        相关资源
        最近更新 更多