如何解决如何使已存在的 Docker 卷可从主机访问?
我有一个 Docker 容器,其中的卷存储了我的大量 Jenkins 数据。我希望从主机访问这些文件。具体来说,我希望我的卷中的一个目录与我主机上的某个文件夹共享。这是绑定安装、docker 卷还是服务创建问题?我怎么能做到这一点?
解决方法
主机系统不能(*)直接访问卷数据。如果容器已经在运行,你可以docker cp
从容器到主机的数据
docker cp jenkins:/var/jenkins_home ./jenkins
如果不是,那么您可以使用Backup a container中的过程从命名卷中复制它
docker run --rm -v jenkins_home:/jenkins -w / \
busybox \
tar cf - jenkins \
| tar xf -
无论哪种方式,您现在主机上都有一个目录 ./jenkins
,您可以将挂载绑定到新容器中
docker run -v "$PWD/jenkins:/var/jenkins_home" ... jenkins/jenkins
您可以删除现在未使用的卷。
如果您有基于 Compose 的设置,您可以使用 和 docker-compose run
来简化导出。似乎没有与 docker-compose
等效的 docker cp
,但由于您尝试复制的数据位于命名卷中,因此这并不重要。
docker-compose run -w /var jenkins tar cf - jenkins_home | tar xf -
mv jenkins_home jenkins
然后将服务声明中的 volumes:
更改为引用 ./jenkins:/var/jenkins_home
而不是命名卷,并删除顶级 volumes:
块中的命名卷。
(*) 如果你在原生 Linux 主机上,Docker 内部存储中有一个路径,包含卷内容作为普通目录,但查看 Docker 内部存储通常不是最好的练习。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。