阅读这些链接:
我的理解是我可以获取数据卷容器并存档其备份。 但是,阅读第一个链接,我似乎无法让它发挥作用。
docker create -v /sonatype-work --name sonatype-work sonatype/nexus /bin/true
我使用以下方法在容器中启动sonatype / nexus图像:
--volumes-from sonatype-nexus
一切顺利,运行nexus后,我检查数据量,我可以看到内部创建,停止并删除nexus并重新开始,所有更改都已保存。
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f84abb054d2e sonatype/nexus "/bin/sh -c 'java -" 22 seconds ago Up 21 seconds 0.0.0.0:8081->8081/tcp nexus
1aea2674e482 sonatype/nexus "/bin/true" 25 seconds ago Created sonatype-work
我现在要备份sonatype-work,但没有运气。
[root@ansible22 ~]# pwd
/root
[root@ansible22 ~]# docker run --volumes-from sonatype-work -v $(pwd):/backup ubuntu tar cvf /backup/sonatype-work-backup.tar /sonatype-work
tar: /backup/sonatype-work-backup.tar: Cannot open: Permission denied
tar: Error is not recoverable: exiting now
我尝试以-u root身份运行,我也尝试过:
/root/sonatype-work-backup.tar
这样做的时候,我可以看到它的东西,但我没有看到tar文件。根据这个例子和我的理解,无论如何我都不会认为这是正确的。
任何人都可以看到我做错了吗?
编辑:Linux版本信息
Fedora release 22 (Twenty Two)
NAME=Fedora
VERSION="22 (Twenty Two)"
ID=fedora
VERSION_ID=22
PRETTY_NAME="Fedora 22 (Twenty Two)"
ANSI_COLOR="0;34"
CPE_NAME="cpe:/o:fedoraproject:fedora:22"
HOME_URL="https://fedoraproject.org/"
BUG_REPORT_URL="https://bugzilla.redhat.com/"
REDHAT_BUGZILLA_PRODUCT="Fedora"
REDHAT_BUGZILLA_PRODUCT_VERSION=22
REDHAT_SUPPORT_PRODUCT="Fedora"
REDHAT_SUPPORT_PRODUCT_VERSION=22
PRIVACY_POLICY_URL=https://fedoraproject.org/wiki/Legal:PrivacyPolicy
VARIANT="Server Edition"
VARIANT_ID=server
Fedora release 22 (Twenty Two)
Fedora release 22 (Twenty Two)
答案 0 :(得分:3)
其原因与selinux标签有关。这里有几个很好的Project Atomic页面:
受限容器进程的默认类型是svirt_lxc_net_t。允许此类型读取和执行/ usr下的所有文件类型以及/ etc下的大多数类型。允许svirt_lxc_net_t使用网络,但不允许读取/ var,/ home,/ root,/ mnt下的内容... svirt_lxc_net_t只允许写入标记为 svirt_sandbox_file_t 和docker_var_lib_t的文件。容器中的所有文件默认标记为svirt_sandbox_file_t。
然后在Using Volumes with Docker can Cause Problems with SELinux:
这将使用容器将运行的确切MCS标签标记容器内的内容,基本上它运行
chcon -Rt svirt_sandbox_file_t -l s0:c1,c2 /var/db
,其中s0:c1,c2对于每个容器都不同。
(在这种情况下,不是/var/db
,而是/root
)
如果您使用-v / SOURCE:/ DESTINATION卷安装图像:z docker会自动将您的内容重新标记为s0。如果使用Z进行卷安装,则标签将特定于容器,并且无法在容器之间共享。
因此,z
或Z
适用于这种情况,但通常可能更喜欢Z
进行隔离。
答案 1 :(得分:0)
我获得许可被拒绝的原因是因为selinux。我不知道为什么,但是如果我发现的话,我会编辑这个答案。禁用selinux并重新启动,我能够进行备份。