最近几天在研究docker
备份文件(操作系统是RHEL7
,docker
版本是1.5.0
)。仿照docker文档,执行如下命令:
[root@localhost data]#docker create -v /dbdata --name dbdata training/postgres /bin/true
[root@localhost data]#docker run -d --volumes-from dbdata --name db1 training/postgres
[root@localhost data]# docker run --volumes-from dbdata -v $(pwd):/backup ubuntu tar cvf /backup/backup.tar /dbdata
tar: /backup/backup.tar: Cannot open: Permission denied
tar: Error is not recoverable: exiting now
看到Permission denied
这个提示,自然首先怀疑用户没有写权限的问题。检查一下当前目录的权限:
[root@localhost data]# ls -alt
total 4
drwxrwxrwx. 2 root root 6 May 7 21:33 .
drwxrwx-w-. 15 root root 4096 May 7 21:33 ..
应该是没问题的。经过在stackoverflow上的一番讨论,得到的建议是有可能是selinux
捣的鬼。查看了一下selinux
状态:
[root@localhost root]# 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
Max kernel policy version: 28
果断把模式改为permissive
:
[root@localhost data]# setenforce 0
[root@localhost data]# sestatus
SELinux status: enabled
SELinuxfs mount: /sys/fs/selinux
SELinux root directory: /etc/selinux
Loaded policy name: targeted
Current mode: permissive
Mode from config file: enforcing
Policy MLS status: enabled
Policy deny_unknown status: allowed
Max kernel policy version: 28
马上工作正常:
[root@localhost data]# docker run --volumes-from dbdata -v $(pwd):/backup ubuntu tar cvf /backup/backup.tar /dbdata
tar: Removing leading `/' from member names
/dbdata/
因为时间原因,没有往下深究。总之,在使用docker
时,要留意一下selinux
,有可能会引起很奇怪的问题。
更新:
最近又碰到这个问题,可以参考这篇总结。
参考资料:
(1)Why does docker prompt “Permission denied” when backing up the data volume?;
(2)How to disable SELinux without restart?;
(3)Quick-Tip: Turning off or disabling SELinux。