备份Docker卷

时间:2018-08-01 09:52:50

标签: docker docker-compose docker-volume

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

postgres:

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

对于吉拉来说:

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

我的想法是,我可以将/var/dkr文件夹同步到一个临时位置,tar并将其发送到S3。现在,我已经阅读了有关托管卷的更多信息,我担心从备份还原时,最终可能会弄乱服务的GID和UID。

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

1 个答案:

答案 0 :(得分:1)

对于容器和主机之间的uid / gid映射问题,没有神奇的解决方案。它需要由Linux内核中的文件系统驱动程序来实现,这就是NFS和某些VM文件系统映射的工作方式。对于“绑定”安装,从Linux强制使用uid / gid并不是一个选择,而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的选项(有关更多详细信息,请参见手册页)。