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

2024-05-06

阅读这些链接:

  1. https://docs.docker.com/userguide/dockervolumes/#backup-restore-or-migrate-data-volumes https://docs.docker.com/userguide/dockervolumes/#backup-restore-or-migrate-data-volumes
  2. 从机器上备份数据卷容器 https://stackoverflow.com/questions/33189965/backing-up-data-volume-containers-off-machine

我的理解是我可以采用数据卷容器并将其备份存档。 然而,阅读第一个链接我似乎无法让它工作。

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)

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

Docker 和 Linux http://www.projectatomic.io/docs/docker-and-selinux/

受限容器进程的默认类型是 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。

Then in 将卷与 Docker 一起使用可能会导致 SELinux 出现问题 http://www.projectatomic.io/blog/2015/06/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 but /root)

如果您使用 -v /SOURCE:/DESTINATION:z 批量挂载映像,docker 会自动为您将内容重新标记为 s0。如果使用 Z 进行卷挂载,则标签将特定于容器,并且不能在容器之间共享。

所以要么z or Z适合这种情况,但人们通常可能更喜欢Z为了隔离。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Docker 数据卷容器。我似乎无法备份 的相关文章

随机推荐