![为什么我的 Docker 容器无法写入已挂载的主机目录?](https://linux22.com/image/682395/%E4%B8%BA%E4%BB%80%E4%B9%88%E6%88%91%E7%9A%84%20Docker%20%E5%AE%B9%E5%99%A8%E6%97%A0%E6%B3%95%E5%86%99%E5%85%A5%E5%B7%B2%E6%8C%82%E8%BD%BD%E7%9A%84%E4%B8%BB%E6%9C%BA%E7%9B%AE%E5%BD%95%EF%BC%9F.png)
我正在使用以下命令运行 Docker 容器:
sudo docker run --name=bamboo-server -p 8085:8085 -p 54663:54663 -v /data/bamboo-server:/home/bamboo hwuethrich/bamboo-server
我希望/home/bamboo
将容器映射到/data/bamboo-server
。但是,我的容器无法写入映射目录。这在主机上工作正常:
[walt@walt bamboo]$ touch /data/test.txt
但不是来自容器:
[walt@walt bamboo]$ sudo docker exec bamboo-server touch /home/bamboo/test.txt
touch: cannot touch '/home/bamboo/test.txt': Permission denied
该目录的权限/data
全部chmodded为777:
[walt@walt bamboo]$ ls -la /data/
total 0
drwxrwxrwx. 3 root root 43 May 6 02:29 .
dr-xr-xr-x. 18 root root 248 Apr 30 14:16 ..
drwxrwxrwx. 2 root root 6 May 6 01:50 bamboo-server
-rw-rw-r--. 1 walt walt 0 May 6 02:29 test.txt
[walt@walt bamboo]$ ls -la /data/bamboo-server/
total 0
drwxrwxrwx. 2 root root 6 May 6 01:50 .
drwxrwxrwx. 3 root root 43 May 6 02:29 ..
其他调试信息:
[walt@walt bamboo]$ sudo docker exec bamboo-server whoami
root
[walt@walt bamboo]$ sudo docker -v
Docker version 1.9.1, build ee06d03/1.9.1
[walt@walt bamboo]$ df -h /data
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 1.9T 33M 1.9T 1% /data
谢谢!
答案1
您在已安装并强制执行 SELinux 的系统上使用 Docker。
在 SELinux 下,要从主机共享到容器的文件必须赋予适当的 SELinux 上下文svirt_sandbox_file_t
。
因此您需要设置适当的文件上下文:
semanage fcontext -a -t svirt_sandbox_file_t "/data(/.*)?"
然后重置文件上下文:
restorecon -r -v /data