【问题标题】:Docker volume restoreDocker 卷恢复
【发布时间】:2025-12-30 02:55:06
【问题描述】:

我在 docker 中有一个 gitlab 容器。 今天我已经安装了 Kitematic 并开始进行实验。我选择了 gitlab 容器 -> 设置 -> 网络 -> 按“连接到主机网络”,然后 gitlab 死了。更改此设置后,我注意到此容器的所有设置现在都已删除。我认为该容器已重新创建。我说的对吗?

我发现了一些未使用的卷。我希望其中一些卷包含我的数据,这些数据在我的实验和容器重建后丢失。

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

所有卷都在虚拟机中,并且没有映射到我的主机操作系统驱动器。

【问题讨论】:

    标签: docker containers docker-volume kitematic


    【解决方案1】:

    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 ...
    

    【讨论】:

    【解决方案2】:

    似乎是重新创建的,是的。如果您运行的是 run 而不是 start 这是这种行为,但我不确定。

    卷(一个例子):

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

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

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

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

    【讨论】: