docker - 备份 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 在较新的版本中解决了这个问题(我使用的是最新版本)。采取这种方法是否安全?备份我的持久卷的更好方法是什么?
解决方案
容器和主机之间的 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 的选项(有关更多详细信息,请参见手册页)。
推荐阅读
- javascript - 如何在复选框中设置选中值
- c++ - 在 O(1) 空间和 O(n) 时间内将相同类型的元素分组到一个数组中
- ios - 如何将从该请求收到的数据或 json 附加到一个空数组?
- python - 人员组中所需的最少面孔 - Azure Face Api
- python - 什么条件会导致 itertools.groupby() 源代码中的 while 循环停止
- python - 研究你的大学
- javascript - Javascript 中的 Thrift TMemoryBuffer 传输
- tinymce - 为什么tinymce会将内容移出
tags? - or auto-close the tags?
- javascript - 新手问题:从 ajax 调用传递错误消息的正确方法是什么?
- python-3.x - How do I check whether a windows program is running or not?