Docker数据卷容器。我似乎无法进行备份

时间:2015-10-17 23:45:24

标签: docker

阅读这些链接:

  1. https://docs.docker.com/userguide/dockervolumes/#backup-restore-or-migrate-data-volumes
  2. Backing up data volume containers off machine
  3. 我的理解是我可以获取数据卷容器并存档其备份。 但是,阅读第一个链接,我似乎无法让它发挥作用。

    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)
    

2 个答案:

答案 0 :(得分:3)

其原因与selinux标签有关。这里有几个很好的Project Atomic页面:

Docker and Linux

  

受限容器进程的默认类型是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进行卷安装,则标签将特定于容器,并且无法在容器之间共享。

因此,zZ适用于这种情况,但通常可能更喜欢Z进行隔离。

答案 1 :(得分:0)

我获得许可被拒绝的原因是因为selinux。我不知道为什么,但是如果我发现的话,我会编辑这个答案。禁用selinux并重新启动,我能够进行备份。