【问题标题】:Copy docker volumes复制 docker 卷
【发布时间】:2021-08-06 14:45:36
【问题描述】:

我想更新一些容器。为了测试,我想创建相应卷的副本。为这个新卷设置一个新容器。

这和cp -r volumeOld volumeNew 一样简单吗?

或者我需要注意什么?

【问题讨论】:

    标签: docker volumes


    【解决方案1】:

    要克隆 docker 卷,您可以将文件从一个卷传输到另一个卷。为此,您必须手动创建一个新卷,然后启动一个容器来复制内容。

    有人已经为此编写了一个脚本,您可以使用它:https://github.com/gdiepen/docker-convenience-scripts/blob/master/docker_clone_volume.sh

    如果没有,请使用以下命令(取自脚本):

    # Supplement "old_volume" and "new_volume" for your real volume names
    
    docker volume create --name new_volume
    
    docker container run --rm -it \
               -v old_volume:/from \
               -v new_volume:/to \
               alpine ash -c "cd /from ; cp -av . /to"
    

    【讨论】:

      【解决方案2】:

      在 Linux 上,它可以像复制目录一样简单。 Docker 将卷保存在 /var/lib/docker/volumes/<volume_name> 中,因此您可以简单地将源卷的内容复制到另一个名称的目录中:

      # -p to preserve permissions
      sudo cp -rp /var/lib/docker/volumes/source_volume /var/lib/docker/volumes/target_volume
      

      【讨论】:

        【解决方案3】:

        如果您要复制由 docker-compose 管理的卷,您还需要在创建新卷时复制特定的标签。 否则 docker-compose 会抛出类似Volume already exists but was not created by Docker Compose 的东西。

        通过MauriceNino 扩展解决方案,这些行对我有用:

        # Supplement "proj1_vol1" and "proj2_vol2" for your real volume names
        
        docker volume inspect proj1_vol1  # Look at labels of old volume
        
        docker volume create \
                   --label com.docker.compose.project=proj2 \
                   --label com.docker.compose.version=2.2.1 \
                   --label com.docker.compose.volume=vol2 \
                   proj2_vol2
        
        docker container run --rm -it \
                   -v proj1_vol1:/from \
                   -v proj2_vol2:/to \
                   alpine ash -c "cd /from ; cp -av . /to"
        

        顺便说一句,这似乎也是重命名 Docker 卷的唯一方法。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-12-14
          • 1970-01-01
          • 1970-01-01
          • 2022-12-30
          • 1970-01-01
          相关资源
          最近更新 更多