将Docker绑定挂载移动到卷

1mrurvl1  于 2023-05-06  发布在  Docker
关注(0)|答案(2)|浏览(157)

实际上,我是这样运行我的容器的,例如:

docker run -v /nexus-data:/nexus-data sonatype/nexus3
              ^

在阅读文档后,我发现完全由docker管理的卷。出于某些原因,我想改变运行容器的方式,做一些类似这样的事情:

docker run -v nexus-data:/nexus-data sonatype/nexus3
              ^

我想将现有的绑定挂载转移到卷。
但我不想丢失的数据到/nexus-data文件夹,有没有可能转移这个文件夹,到新的卷,whitout重新启动一切?因为我也有Jenkins和Sonar容器,所以我只想改变拥有持久化数据的方式。这是一个正确的方法来做这件事吗?

yc0p9oo0

yc0p9oo01#

您可以尝试以下步骤,这样您就不会丢失当前的连接数据。

#>docker run -v nexus-data:/nexus-data sonatype/nexus3
#>docker cp /nexus-data/. <container-name-or-id>:/nexus-data/
#>docker stop <container-name-or-id>
#>docker start <container-name-or-id>

docker copy会将数据从主机的/nexus-data文件夹复制到容器的FS /nexus-data文件夹,这是您挂载的卷。
如果您在执行以下步骤时遇到任何问题,请告诉我。
编辑:将“docker copy”更改为“docker cp”

ffscu2ro

ffscu2ro2#

这里有另一种方法,我刚刚成功地使用了一个Heimdall容器。它在sonatype/nexus 3镜像的文档中概述:
1.停止运行的容器(例如名为nexus3
1.创建一个名为nexus-data的docker卷,使用以下命令创建它:docker volume create nexus-data
1.默认情况下,Docker将卷的内容存储在/var/lib/docker/volumes/nexus-data/_data/
1.只需将您之前使用绑定挂载的目录复制到上述卷目录(您需要超级用户权限才能执行此操作,或者用户必须是docker组的一部分):cp -R /path/to/nexus-data/* /var/lib/docker/volumes/nexus-data/_data/
1.使用$ docker run -v nexus-data:/nexus-data sonatype/nexus3 --name=nexus3重新启动nexus3容器
1.您的容器将备份并运行,其中保存在目录/path/to/nexus-data/中的文件现在已镜像到docker卷中。当然,要检查功能是否相同,如果相同,则可以删除/path/to/nexus-data/目录
Q.E. D

相关问题