我使用以下命令运行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 ..
其他debugging信息:
[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
谢谢!
您在安装了SELinux的系统上使用Docker。
在SELinux下,要从主机共享到容器的文件必须被赋予相应的SELinux上下文svirt_sandbox_file_t
。
所以你需要设置适当的文件上下文:
semanage fcontext -a -t svirt_sandbox_file_t "/data(/.*)?"
然后重置文件上下文:
restorecon -r -v /data