在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