如何使已存在的 Docker 卷可从主机访问?
How to make an already existing Docker volume accessible from host?
我有一个 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-内部存储通常不是最佳做法。
我有一个 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-内部存储通常不是最佳做法。