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

时间:2016-03-30 15:01:54

标签: docker docker-compose chown docker-volume

我有以下示例

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主机目录的方式更合理/更安全(比如,我用来在主机上做大部分事情的相对无特权的用户)或者我只是必须手动吸吮它们chown。我已经开始使用一些脚本来解决其他问题了,所以多加几行不会成为一个问题,但我真的很想保持自我 - 书面自动化最小化,如果可以的话 - 愚蠢错误的可能性更小。

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

额外点:我可以将卷移到更方便的位置吗?说,/home/myuser/myserverstuff/volumes

1 个答案:

答案 0 :(得分:19)

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

要访问卷内的数据,有许多选项;

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