在Docker中将数据添加到现有命名卷的正确方法是什么?

我以前用一个卷容器使用Docker:

docker run -d --name jenkins-data jenkins:tag echo "data-only container for Jenkins" 

但是现在我通过创build一个命名卷来改变为新的方式:

  docker volume create --name my-jenkins-volume 

我将这个新卷绑定到一个新的Jenkins容器。 我唯一剩下的就是一个文件夹,里面有我以前的jenkins容器的/var/jenkins_home 。 (通过使用docker cp )现在我想填充我的新命名卷与该文件夹的内容。

我可以将该文件夹的内容复制到/var/lib/jenkins/volume/my-jenkins-volume/_data

你当然可以将数据直接复制到/var/lib/docker/volumes/my-jenkins-volume/_data ,但是通过这样做你是:

  • 依靠物理访问docker主机。 如果您正在与远程Docker API进行交互,此技术将无法工作。

  • 依靠卷实现的一个特定方面将来可能会发生变化,打破依赖它的任何进程。

我认为你最好依靠通过命令行客户端使用docker API完成的事情。 最简单的解决scheme可能只是使用一个辅助容器,如下所示:

 docker run -v my-jenkins-volume:/data --name helper busybox true docker cp . helper:/data docker rm helper 

你可以使用接受的答案,例如

 docker run --rm -v `pwd`:/tmp/src -v my-jenkins-volume:/data busybox cp -r /tmp/src /data