首页 > 解决方案 > 备份 docker 卷

问题描述

我在 Ubuntu 机器上创建了一个单独的卷,目的是存储 docker 卷和持久化数据。到目前为止,我已经在主机上为两个服务(jira 和 postgres)创建了卷,我打算将它们备份到异地。我这样docker-compose使用

postgres:

volumes:
   - /var/dkr/pgdata:/var/lib/postgresql/data

对于jira:

volumes:
   - /var/dkr/jira:/var/atlassian/jira

我的想法是我可以将/var/dkr文件夹同步到一个临时位置,tar然后将其发送到 S3。既然我已经阅读了有关托管卷过程的更多内容,我担心当我从备份恢复时,我可能最终会弄乱服务的 GID 和 UID。

我的问题是 - docker 在较新的版本中解决了这个问题(我使用的是最新版本)。采取这种方法是否安全?备份我的持久卷的更好方法是什么?

标签: dockerdocker-composedocker-volume

解决方案


容器和主机之间的 uid/gid 映射问题没有神奇的解决方案。它需要由 Linux 内核中的文件系统驱动程序来实现,这就是 NFS 和一些 VM 文件系统映射的工作方式。对于“绑定”挂载,强制使用 uid/gid 不是 Linux 的选项,Docker 只是在此之上提供了一个易于使用的界面。

使用您的备份,确保 uid/gid 是您备份的一部分(tar 默认执行此操作)。还要确保在您的容器中使用的 uid/gid 在图像中定义或指定为您的docker run或撰写文件中的静态值。只要您不依赖主机特定的 uid/gid,并恢复保留 uid/gid(tar 作为 root 的默认设置),您就不会有任何麻烦。

最坏的情况是,您运行类似find /var/dkr -uid $old_uid -exec chown $new_uid {} \;更改 UID 的操作。tar 命令还具有在提取时更改 uid/gid 的选项(有关更多详细信息,请参见手册页)。


推荐阅读