当前位置:  开发笔记 > 运维 > 正文

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

如何解决《在Ubuntu上运行docker:挂载的主机卷不能从容器写入》经验,为你挑选了2个好方法。

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

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

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

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

所以我将主机Ubuntu OS的"api"目录挂载到/ usr/src/app下的docker容器中.

docker inspect 表明该卷是可写的

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

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

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



1> Avi Farada..:

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

docker run -v ./api:/usr/src/app:Z

:z - 将使用标签'svirt_sandbox_file_t'为所有容器添加权限

:Z - 将仅向当前容器标签添加权限

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

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

虽然我应该添加我仍然有一些问题(请参阅使用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



2> Freedom_Ben..:

如果你uid的主机(id -u)uid与docker容器中的用户(通常是"docker")不同,那么你可能会遇到这个问题.你可以试试:

    使用户与docker容器中的用户之间的UID相同.

    将目录的组权限设置为您和docker所属的组可写.

    你也可以使用核选项:

chmod a+rwx -R project-dir/

核选项会让你的git工作空间变得肮脏,这会让你大吃一惊,所以这不是最好的长期解决方案.它会止血.

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

    https://github.com/docker/docker/issues/7906

    https://github.com/docker/docker/issues/7198


"核选项"和uid修复都有效.对于uid修复,我刚刚将"usermod -u 1000 docker"添加到Dockerfile.
推荐阅读
wurtjq
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有