批量拒绝Docker许可

时间:2018-08-15 08:15:27

标签: docker docker-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

容器中的最后一条命令返回我:ls -l /usr/share/nginx/html。当然,用创建的容器的名称替换inspiring_wing

2 个答案:

答案 0 :(得分:3)

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

如果某人与此帖子有相同的问题,这是如何检查情况是否相同:

1 /检查SELinux状态:sestatus。如果该模式为 enforcecing ,则可能会阻止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/2 /将模式更改为宽松setenforce 0。不再对Docker施加任何限制。

答案 1 :(得分:1)

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

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