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 创建的容器的名称替换。
该问题是由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不应再有任何限制。