Docker 权限被拒绝

Docker permission denied with volume

我正在尝试启动一个 Nginx 容器,该容器为主机上的静态内容提供服务,位于 /opt/content。

容器启动于:

docker run -p 8080:80 -v /opt/content:/usr/share/nginx/html nginx:alpine

而且 Nginx 一直给我 403 Forbidden。此外,当试图检查目录的内容时,我得到了奇怪的结果:

$ $ docker exec -i -t inspiring_wing /bin/sh
/ # ls -l /usr/share/nginx/
total 4
drwxrwxrwx    3 root     root          4096 Aug 15 08:08 html
/ # ls -l /usr/share/nginx/html/
ls: can't open '/usr/share/nginx/html/': Permission denied
total 0

chmod -R 777 /opt/确定对主机没有限制,但它不会改变任何东西。我也尝试将 :ro 标志添加到音量选项,但没有成功。

如何让容器读取已安装的卷?

更新:这是我为重现此问题所做的完整步骤(以 root 用户身份,使用另一个目录从干净的配置开始):

mkdir /public
echo "Hello World" > /public/index.html
chmod -R 777 /public
docker run -p 8080:80 -d -v /public:/usr/share/nginx/html nginx:alpine
docker exec -i -t inspiring_wing /bin/sh
ls -l /usr/share/nginx/html

容器内的最后一个命令 returns 我:ls -l /usr/share/nginx/html。当然,把inspiring_wing替换成创建容器的名字。

您正在从主机上的 /opt/content 复制到容器中的 /usr/share/nginx/html。因此,当您登录时,您想在 /usr/share/nginx/html 中查找文件。

如果这还不够,您可以粘贴 ls -lah /usr/share/nginx/html 的内容,但我认为您那里没有索引页。

问题是由阻止 Docker 访问文件系统的 SELinux 引起的。

如果有人遇到与此相同的问题 post,请按以下方法检查情况是否相同:

1/ 检查 SELinux 状态:sestatus。如果模式是 enforcing,它可能会阻止 Docker 访问文件系统。

# sestatus
SELinux status:                 enabled
SELinuxfs mount:                /sys/fs/selinux
SELinux root directory:         /etc/selinux
Loaded policy name:             targeted
Current mode:                   enforcing
Mode from config file:          enforcing
Policy MLS status:              enabled
Policy deny_unknown status:     allowed
Memory protection checking:     actual (secure)
Max kernel policy version:      31

2/ 将模式更改为 宽容setenforce 0。 Docker.

应该没有更多的限制了