备份和还原Docker命名卷

Rob*_*uda 6 docker docker-volume

我对数量和所有权有疑问。

作为示例,我使用以下图像:privatebin,但是在任何情况下都是相同的。

首先,我要创建音量:

$ docker volume create privatebin-data
Run Code Online (Sandbox Code Playgroud)

从泊坞窗检查,我可以看到数据位于何处:

$ docker inspect privatebin-data 
[
    {
        "CreatedAt": "2018-12-04T21:42:46+01:00",
        "Driver": "local",
        "Labels": {},
        "Mountpoint": "/var/lib/docker/volumes/privatebin-data/_data",
        "Name": "privatebin-data",
        "Options": {},
        "Scope": "local"
    }
]
Run Code Online (Sandbox Code Playgroud)

按照docker hub的说明,我正在启动映像:

$ docker run -d --restart="always" --read-only -p 8080:80 -v privatebin-data:/srv/data privatebin/nginx-fpm-alpine:1.1.1
Run Code Online (Sandbox Code Playgroud)

然后,我访问http:// localhost:8080,一切正常。

现在的卷内容:

$ ls -l /var/lib/docker/volumes/privatebin-data/_data
total 16
drwx------ 3 82 82 4096 Dec  4 21:49 73
-rw-r----- 1 82 82   46 Dec  4 21:49 purge_limiter.php
-rw-r----- 1 82 82  529 Dec  4 21:49 salt.php
-rw-r----- 1 82 82  131 Dec  4 21:49 traffic_limiter.php
Run Code Online (Sandbox Code Playgroud)

我想通过归档来备份目录:

tar -C /var/lib/docker/volumes/privatebin-data -czf privatebin-data-backup.tar.gz _data
Run Code Online (Sandbox Code Playgroud)

我的问题是:我可以安全地假设如果重新启动映像(例如在其他服务器上),则用户和组所有者仍为82?这是备份和还原docker卷的正确方法吗?

BMi*_*tch 6

UID / GID来自图像内部,privatebin / nginx-fpm-alpine。因此,只要您以相同的方式/顺序在其中创建用户,并且基本映像中没有任何变化,那么无论在何处运行映像,这些ID都将相同。

我最好的备份和还原卷方法是使用一个实用程序容器,以防Docker后端发生更改,或者您决定将命名的卷移动到另一个位置或外部数据存储。执行该命令的命令如下所示:

docker run --rm \
  -v privatebin-data:/source:ro \
  busybox tar -czC /source . >privatebin-data-backup.tar.gz
Run Code Online (Sandbox Code Playgroud)

docker run --rm -i \
  -v privatebin-data:/target \
  busybox tar -xzC /target <privatebin-data-backup.tar.gz
Run Code Online (Sandbox Code Playgroud)