批量拒绝Docker许可

Flo*_*ent 0 docker docker-volume

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

容器以以下内容开头:

docker run -p 8080:80 -v /opt/content:/usr/share/nginx/html nginx:alpine
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

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

Flo*_*ent 5

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

如果某人与本帖子有相同的问题,请按照以下方法检查是否存在相同的情况:

1 /检查SELinux状态:sestatus。如果该模式为强制模式,则可能会阻止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
Run Code Online (Sandbox Code Playgroud)

2 /将模式更改为宽松setenforce 0。对Docker不应再有任何限制。