【问题标题】:chown docker volumes on host (possibly through docker-compose)主机上的 chown docker 卷(可能通过 docker-compose)
【发布时间】:2016-07-18 16:26:13
【问题描述】:

我有下面的例子

version: '2'

services:
  proxy:
    container_name: proxy
    hostname: proxy
    image: nginx
    ports:
      - 80:80
      - 443:443
    volumes:
      - proxy_conf:/etc/nginx
      - proxy_htdocs:/usr/share/nginx/html

volumes:
  proxy_conf: {}
  proxy_htdocs: {}

效果很好。当我运行docker-compose up 时,它会在/var/lib/docker/volumes 中创建那些命名卷,一切都很好。但是,从主机,我只能以 root 身份访问/var/lib/docker,因为它是root:root(有道理)。我想知道是否有一种方法可以将主机的目录chowning 到更明智/更安全的东西(例如,我用来在主机上做大多数事情的相对无特权的用户),或者我是否只需要把它吸起来chown他们手动。我已经开始有一些脚本来解决其他问题,所以多写几行不会有太大问题,但我真的很想尽量减少我自己编写的自动化,如果我可以 -- 犯愚蠢错误的机会更少。

顺便说一句,不:如果我挂载主机目录而不是创建卷,它们会被覆盖,这意味着如果它们开始为空,它们将保持为空,并且我不会从内部获取默认配置(或其他配置)容器。

加分:我可以将卷移动到更方便的位置吗?说,/home/myuser/myserverstuff/volumes?

【问题讨论】:

    标签: docker docker-compose chown docker-volume


    【解决方案1】:

    最好不要尝试直接访问/var/lib/docker 内的文件。这些目录应该由 docker 守护进程管理,而不是被弄乱。

    要访问卷内的数据,有多种选择;

    • 使用绑定挂载的目录(您考虑过,但不适合您的用例)。
    • 使用“服务”容器,该容器使用相同的卷并使其可通过该容器访问,例如运行ssh 的容器(使用scp)或SAMBA 容器(如svendowideit/samba)李>
    • 使用volume-driver plugin。周围有各种插件提供各种选项。例如,local persist plugin 是一个非常简单的插件,它允许您指定 docker 应该存储卷数据的位置(所以在 /var/lib/docker 之外)

    【讨论】:

    • 谢谢,本地persist插件实际上可能正是我所需要的。我曾想过使用服务容器,并通过 nfs 导出卷,但它似乎对我的需求来说太复杂了。
    • 太棒了!我希望它对你有用。没有“一刀切”,所以我想“让我们提一些可供选择的选项”:-)
    • 我也想到了 NFS/SMB 导出的事情。我喜欢在我的笔记本电脑上远程安装这些卷并使用我最喜欢的编辑器/文件管理器的想法,但是通过 SSH 的 NFS 很痛苦,我对 Kerberos 没有用处,而且我不确定 SMB 是否提供任何加密(访问控制与 Kerberos 一样混乱)。
    • 实际上仅指定命名卷的位置,local 卷驱动程序(随 Docker 一起提供)就足够了。有关示例,请参见 stackoverflow.com/questions/36387032/…。
    • OP 特别想要将容器内容复制到空挂载主机的命名卷行为。有什么理由为什么这个解决方案不适合@thaJeztah? stackoverflow.com/a/45039609/3080207
    猜你喜欢
    • 2016-03-10
    • 2020-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-10
    • 1970-01-01
    • 2019-06-27
    相关资源
    最近更新 更多