Docker在我的Mac上工作得很好,但是我必须在VirtualBox(或者Parallels或者VMWare Fusion)里面运行docker主机,因为Mac的内核不支持docker。
所以我试图设置我的应用程序和docker-compose在Ubuntu桌面 – 本地,docker客户端和docker主机都在同一个系统上物理运行。 这工作,但我的运行docker集装箱不能写入已安装的主机卷。
我使用docker-compose进行以下设置:
volumes: - ./api:/usr/src/app
因此,我将主机Ubuntu OS的“api”目录挂载到/ usr / src / app下的docker容器中。
docker inspect <container ID>
显示该卷是可写的
"Destination": "/usr/src/app", "Mode": "rw", "RW": true
然而,这不是:当我尝试创build一个目录或从docker容器内编辑一个文件时,我得到permission denied
。
当然,我search了这个问题,并且遇到了几个CentOS / RHEL的SELinux问题,但是我运行Ubuntu 15.10,64位版本 ,而不是CentOS。
如果您的主机( id -u
)上的uid
与docker容器中的用户的uid
不同(通常是“docker”),那么您可以遇到这个问题。 你可以试试:
chmod a+rwx -R project-dir/
核选项会让你的git
工作区变得肮脏,这会让你大吃一惊,所以不是最好的长期解决方案。 它止住了流血的寿命。
为了进一步了解这个问题,你可能会发现这些有用的:
从Docker版本1.7开始,您可以选择使用如下所示的:Z或:z标志来挂载具有对容器的权限的主机目录:
docker run -v ./api:/usr/src/app:Z
从docker-compose v1.4.0开始,你可以在Docker中使用它:
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