chown docker 主机上的卷(可能通过 docker-compose)

chown docker volumes on host (possibly through docker-compose)

我有下面的例子

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(有道理)。我想知道是否有一种方法可以 chown 将主机的目录设置为更多 sensible/safe 的内容(例如,我用来在主机上执行大多数操作的相对无特权的用户),或者我是否只需要接受它并手动 chown 它们。我已经开始有一些脚本可以解决其他问题,所以多几行不会有什么大问题,但我真的很想把我自己写的自动化保持在最低限度,如果我可以 -- 犯愚蠢错误的机会更少。

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

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

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

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

  • 使用绑定挂载的目录(您考虑过,但不适合您的用例)。
  • 使用 "service" 容器,该容器使用相同的卷并可通过该容器访问它,例如容器 运行 ssh(使用 scp)或一个 SAMBA 容器(例如 svendowideit/samba
  • 使用 volume-driver plugin. there's various plugins around that offer all kind of options. For example, the local persist plugin 是一个非常简单的插件,它允许您指定 哪里 docker 应该存储卷数据(所以在 /var/lib/docker)