什么是docker容器的卷中的'z'标志 - 来自选项?

Yog*_*war 40 docker

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

ami*_*omp 49

两个后缀: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\-it\--name devtest\-v"$(pwd)"/ target:/ app:z \nginx:latest

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

  • 但这究竟意味着什么?如果没有'z'后缀,卷内容将不会被共享?这是什么意思"Docker会用共享内容标签标记内容."? (4认同)
  • 尚不清楚这些选项如何影响容器,也许一些示例会有所帮助。 (2认同)
  • docker-compose 的类似选项是什么 (2认同)

Fab*_*olo 8

根据我机器上的测试,-z您可以与另一个容器共享一个容器中的内容。假设这个图像:

FROM alpine
RUN mkdir -p /var/www/html \
    && echo "foo" > /var/www/html/index.html
Run Code Online (Sandbox Code Playgroud)

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

$ docker build . -t test-z
Run Code Online (Sandbox Code Playgroud)

现在创建并运行名为testing-z的test-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
Run Code Online (Sandbox Code Playgroud)

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

$ docker run --rm --volumes-from testing-z -it nginx sh
# cat /var/www/html/index.html
foo
Run Code Online (Sandbox Code Playgroud)

观察:我正在运行 Docker 版本 19.03.5-ce,内部版本 633a0ea838