在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
选项启动的。