gpt4 book ai didi

linux - Docker 容器中的 "Permission denied"除非 --privileged=true

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:48:03 25 4
gpt4 key购买 nike

我正在尝试将 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

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

有没有什么方法可以在不构建具有提升权限的 nginx 服务 的情况下访问内容?

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

相关问题:

最佳答案

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

关于linux - Docker 容器中的 "Permission denied"除非 --privileged=true,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39487201/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com