Docker,以只读方式挂载卷

时间:2013-10-03 12:06:54

标签: readonly docker

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

当我使用-v标志进行挂载时,它会提供我给出的任何用户名,我在docker映像中创建了一个非root用户,但是卷中的所有文件都是作为运行docker的用户的所有者,更改为我从命令行提供的用户,因此我无法生成只读文件和文件夹。我怎么能阻止这个?

我还添加了mustafa ALL=(docker) NOPASSWD: /usr/bin/docker,因此我可以通过终端更改为其他用户,但文件仍然拥有我的用户权限。

2 个答案:

答案 0 :(得分:139)

您可以通过将:ro附加到-v开关来指定卷应该是只读的:

docker run -v volume-name:/path/in/container:ro my/image

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

2018编辑

根据Use volumes documentation,现在有另一种使用--mount开关安装卷的方法。以下是如何以只读方式使用它:

$ docker run --mount source=volume-name,destination=/path/in/container,readonly my/image

搬运工-撰写

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

version: "3"
services:
  redis:
    image: redis:alpine
    read_only: true

答案 1 :(得分:1)

docker-compose

这是在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:

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