我尝试将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文件中,但由于安全性要求,我不允许这样做。
尝试访问容器中的卷时,出现以下错误:
[root@host docker-nginx]# docker exec -it dockernginx_nginx_1 bash
root@2d574f9c6131:/# ls /share/user1/
ls: cannot open directory /share/user1/: Permission denied
即使将自己附加到具有以下参数的容器上,也会让我无法访问资源(或至少列出内容):
docker exec -it --privileged=true -u 6004:6004 dockernginx_nginx_1 bash
(注意:6004:6004
恰好是id:gid所有权传递给/share/user1/
)
有没有办法在不使用提升权限构建nginx service
的情况下访问内容?
也许问题在于容器中强制执行的SELinux限制?
容器正在运行Debian GNU/Linux 8 (jessie)
,主机正在运行CentOS Linux 7 (Core)
相关问题:
答案 0 :(得分:2)
Docker正在运行--selinux-enabled=true
,这禁止我访问容器中目录的内容
阅读更多:http://www.projectatomic.io/blog/2016/07/docker-selinux-flag/
解决方案是禁用它,它可以通过(1)配置或(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"
验证docker-containerd
未使用--selinux-enabled=true
选项启动cron(5,15,25,35,45,55 * * * ? *)
。