我正在尝试启动一个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
。
答案 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
的内容,但我认为您只是没有索引页。