备份 docker 个卷
Backing up docker volumes
我在 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 文件系统映射的工作方式。对于 "bind" 安装,强制 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 的选项(有关详细信息,请参阅手册页)。
我在 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 文件系统映射的工作方式。对于 "bind" 安装,强制 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 的选项(有关详细信息,请参阅手册页)。