在Docker容器中“权限被拒绝”,除非–privileged = true

我试图运行一个nginx容器作为服务,并在主机和容器之间共享2个卷,以便一个目录中的文件自动与另一个配对目录共享。

我的docker-compose.yml如下:

version: '2' services: nginx: image: nginx build: . ports: - "5000:80" volumes: - /home/user1/share:/share/user1 - /home/user2/share:/share/user2 restart: always 

我现在唯一可以做到这一点的方法是通过添加privileged: true对docker-compose文件是privileged: true ,但是由于安全性的要求,我不允许这样做。

当试图访问容器中的卷时,出现以下错误:

 [root@host docker-nginx]# docker exec -it dockernginx_nginx_1 bash root@2d574f9c6131:/# ls /share/user1/ ls: cannot open directory /share/user1/: Permission denied 

即使将自己附加在容器上使用下面的参数禁止我访问资源(或至less列出内容):
docker exec -it --privileged=true -u 6004:6004 dockernginx_nginx_1 bash
(注意: 6004:6004恰好是传递给/share/user1/的id:gid所有权)

有没有任何方式访问的内容,而不build立与提升特权的nginx service

也许问题在于在容器中执行SELinux限制?
容器运行Debian GNU/Linux 8 (jessie) ,主机运行CentOS Linux 7 (Core)

相关问题:

  • 在Docker容器内部拒绝权限

Docker运行的是--selinux-enabled=true ,这--selinux-enabled=true我无法访问容器中的目录内容。
阅读更多: http : //www.projectatomic.io/blog/2016/07/docker-selinux-flag/

解决方法是禁用它,它可以通过(1)configuration或(2)安装非selinux CentOS软件包来完成,我使用了选项2:

我确保重新安装和更新Docker从1.10到1.12.1,而不是安装docker-engine-selinux.noarch ,而是有docker-engine.x86_64并且安装SELinux软件包作为依赖(yum自动执行此操作)。 通过这样做并启动Docker守护进程,可以使用ps aux | grep "docker"validation --selinux-enabled=true docker-containerd ps aux | grep "docker"不是用--selinux-enabled=true选项启动的。