Docker,以只读方式挂载卷

Mus*_*afa 97 readonly docker

我正在使用Docker,我想安装一个变化很大的dyanmic文件夹(所以我不必为每个执行器生成docker,这会太昂贵),但我希望该文件夹只读.然而,将文件夹所有者更改为其他人的工作chown需要root访问权限,我不希望将其暴露给应用程序.

当我使用-vflag挂载时,它会提供我给出的任何用户名,我在docker镜像中创建了一个非root用户,但是卷中所有文件与所有者作为运行docker的用户,更改为我提供的用户命令行,所以我无法制作只读文件和文件夹.我怎么能阻止这个?

我还添加了mustafa ALL=(docker) NOPASSWD: /usr/bin/docker,所以我可以通过终端更改为另一个用户,但文件仍然拥有我的用户的权限.

Alp*_*Alp 156

您可以通过附加:ro-v交换机来指定卷应该是只读的:

docker run -v volume-name:/path/in/container:ro my/image
Run Code Online (Sandbox Code Playgroud)

请注意,该文件夹在容器中是只读的,在主机上是读写的.

2018编辑

根据使用卷文档,现在有另一种使用该--mount开关安装卷的方法.以下是如何以只读方式使用它:

$ docker run --mount source=volume-name,destination=/path/in/container,readonly my/image
Run Code Online (Sandbox Code Playgroud)

泊坞窗,撰写

以下是如何在以下位置指定只读容器的示例docker-compose:

version: "3"
services:
  redis:
    image: redis:alpine
    read_only: true
Run Code Online (Sandbox Code Playgroud)

  • 是否允许写入,但不能将它们写回主机?这太棒了 (7认同)
  • 这听起来像你想要指定任何音量. (6认同)
  • 也许您可以为此提供一个新问题,在那里您提供更多详细信息并将其链接到此处? (5认同)
  • 有点......我只是不喜欢仅仅为了使用 Dockerfile COPY 或在关闭的容器上使用单独的“docker cp”命令而构建图像。 (3认同)
  • 在我的答案中添加了有关do​​cker-compose的信息 (2认同)
  • 您还可以使用 docker compote 的简短语法,即`redis:alpine:ro` (2认同)
  • 我正在使用 `-v ...:ro` 变体。我想说的是,不是变成只读的文件夹,而是容器通过其查看文件夹的文件系统。该文件夹的权限显示其可写,但写入访问失败,并显示文件系统为只读的消息。 (2认同)

Den*_*huk 6

码头工人组成

这是在中指定只读卷的正确方法docker-compose

version: "3"
services:
  my_service:
    image: my:image
    volumes:
      - type: volume
        source: volume-name
        target: /path/in/container
        read_only: true
volumes:
  volume-name:
Run Code Online (Sandbox Code Playgroud)

https://docs.docker.com/compose/compose-file/#long-syntax-3

  • 您还可以在 `volumes` 下执行 `- './my-file.txt:/container-readonly-file.txt:ro'` - 请注意末尾的 `:ro` 。 (20认同)
  • 确实是正确的,但是这里的只读是卷,而不是容器。 (2认同)