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

新手上路,请多包涵

我以旧方式使用 Docker,带有一个卷容器:

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

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

  docker volume create --name my-jenkins-volume

我将这个新卷绑定到一个新的 Jenkins 容器。我只剩下一个文件夹,其中有我以前的詹金斯容器的 /var/jenkins_home 。 (通过使用 docker cp )现在我想用该文件夹的内容填充我的新命名卷。

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

原文由 DenCowboy 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 341
2 个回答

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

  • 依赖于对 docker 主机的物理访问。如果您与远程 docker api 交互,此技术将不起作用。

  • 依赖卷实现的特定方面可能会在未来发生变化,从而破坏您依赖它的任何流程。

我认为你最好依靠你可以通过命令行客户端使用 docker api 完成的事情。最简单的解决方案可能只是使用辅助容器,例如:

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

原文由 larsks 发布,翻译遵循 CC BY-SA 3.0 许可协议

您不需要启动一些容器来将数据添加到已经存在的命名卷,只需创建一个容器并在那里复制数据:

 docker container create --name temp -v my-jenkins-volume:/data busybox
docker cp . temp:/data
docker rm temp

原文由 Dmytro Melnychuk 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题