在Ubuntu上运行docker:挂载的主机卷不能从容器写入

时间:2015-12-01 22:25:05

标签: linux ubuntu docker docker-compose

Docker在我的Mac上运行得很好,但我必须在VirtualBox(或Parallels,或VMWare Fusion)中运行docker主机,因为Mac的内核不支持docker。

所以我尝试在Ubuntu桌面上设置我的应用程序和docker-compose - 本机地,docker客户端和docker主机在同一系统上物理运行。这很有用,但是我运行的docker容器无法写入已安装的主机卷。

我使用docker-compose进行以下设置:

volumes:
   - ./api:/usr/src/app

所以我正在安装" api"主机Ubuntu OS的目录到/ usr / src / app下的docker容器中。

docker inspect <container ID>表示该卷是可写的

"Destination": "/usr/src/app",
"Mode": "rw",
"RW": true

但事实并非如此:当我尝试在docker容器中创建目录或编辑文件时,我得到permission denied

当然,我搜索了这个问题,我遇到了一些CentOS / RHEL的SELinux问题,但我正在运行Ubuntu 15.10,64位版本,而不是CentOS。< / p>

2 个答案:

答案 0 :(得分:16)

从docker 1.7版开始,您可以选择使用:Z或:z标志来安装具有容器权限的主机目录,如下所示:

docker run -v ./api:/usr/src/app:Z
  • :z - 将使用标签&#39; svirt_sandbox_file_t&#39;
  • 为所有容器添加权限
  • :Z - 仅将权限添加到当前容器标签

从docker-compose v1.4.0开始,您可以在docker compose中使用它,如下所示:

volumes:
   - ./api:/usr/src/app:Z

虽然我应该加上我仍然有一些问题 (见Adding permissions to host directory with docker-compose)。

参考文献:

将卷与Docker一起使用会导致SELinux出现问题 - http://www.projectatomic.io/blog/2015/06/using-volumes-with-docker-can-cause-problems-with-selinux/

Docker用户指南 -    https://docs.docker.com/engine/userguide/dockervolumes/#volume-labels

Docker-compose v1.4.0的发行说明 - https://github.com/docker/compose/releases/tag/1.4.0

答案 1 :(得分:15)

如果主机上的uidid -u)与Docker容器中用户的uid相同(通常为#34; docker&#34) ;)然后你可以有这个问题。你可以尝试:

  1. 在您的用户和泊坞窗容器中的用户之间建立相同的UID。
  2. 为您和Docker所属的组设置要写入的目录的组权限。
  3. 你也可以使用核选项:
  4. chmod a+rwx -R project-dir/

    核选项会让你的git工作区变得肮脏,这会让你感到非常恼火,所以不是最好的长期解决方案。它会止血。

    为了进一步了解这个问题,您可能会发现这些有用:

    1. https://github.com/docker/docker/issues/7906
    2. https://github.com/docker/docker/issues/7198