Docker 卷还原

Docker volume restore

我在 docker 中有一个 gitlab 容器。 今天我安装了 Kitematic 并开始试验。我选择 osed gitlab 容器 -> 设置 -> 网络 -> 按下 'CONNECT TO HOST NETWORK' 然后 gitlab 死了。更改此设置后,我注意到此容器的所有设置现在都已删除。我认为该容器已重新创建。我说的对吗?

我发现了一些未使用的卷。我希望这些卷中的一些包含我的数据,这些数据在我的实验和容器重新创建之后是 lost。

如何更改现有容器上的卷以及如何确定我的 gitlab 映像的先前实例正在使用哪些未使用的卷?以及如何将它们映射到相应的 docker 文件夹,如“/etc/gitlab”、“/var/log/gitlab”、“/var/opt/gitlab”?也许我可以以某种方式浏览它们,这将帮助我了解基于文件结构的所有内容?

所有卷都在虚拟机中,没有映射到我的 host os 驱动器。

好像是重制的,是的。如果您使用 运行 run 而不是 start,这就是行为,但我不确定。

卷(一个例子):

docker run -v your-vm-path:/var/opt/gitlab gitlab:latest

您的数据应该在您的旧卷中(本地虚拟机路径)。如果不是,则说明您没有使用这些卷。

如果数据在您的本地虚拟机路径 (vols) 中,请参阅 docker cp --help 将您的数据放入您的容器或从您的容器中获取数据。

对于docker,您的主机就是您的虚拟机。

gitlab docker文件声明三卷:

# Define data volumes
VOLUME ["/etc/gitlab", "/var/opt/gitlab", "/var/log/gitlab"]

因此,如果您在第一次启动时没有给它们命名,docker 将自动创建具有一些随机名称的卷。您可以检查每个卷并查看它实际包含的文件:

docker volume ls
docker volume inspect <volume-name>

在主机上找到 Mountpoint 分析哪个卷映射到容器中的哪个目录。您可以通过

将其与新容器进行比较
docker exec -it <container-name> ls /var/opt/gitlab

确定哪个卷映射到哪个目录后,重新创建容器:

docker run <existing-volume1-name>:/etc/gitlab <existing-volume2-name>:/var/opt/gitlab ...