【问题标题】:Move docker bind-mount to volume将 docker bind-mount 移动到卷
【发布时间】:2022-05-02 03:41:50
【问题描述】:

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

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

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

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

我想将现有的绑定挂载转移到卷。

但我不想将数据丢失到/nexus-data 文件夹中,是否有可能将此文件夹转移到新卷中,而无需重新启动所有内容?例如,因为我还拥有 Jenkins 和 Sonar 容器,所以我只想改变拥有持久数据的方式。这是一个正确的方法吗?

【问题讨论】:

  • 这可能是一种一流的方法,但一个 hacky 的解决方案是将两者都安装到一个容器中,然后从容器内部从一个复制到另一个。跨度>

标签: docker volumes


【解决方案1】:

您可以尝试以下步骤,以免丢失当前的关联数据。

#>docker run -v nexus-data:/nexus-data sonatype/nexus3
#>docker copy /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 文件夹,这是您安装的卷。

如果您在执行以下步骤时遇到任何问题,请告诉我。

【讨论】:

  • 那些端口(-p 标志)呢,因为它们已经被占用了,我只是放了其他的,之后就有可能带着想要的端口回来?
  • 比如我的nexus容器取8081,我宁愿不改。
  • 停止第一个 NEXUS 容器(实际上是使用 8081),因为这个容器已经将数据存储在主机的目录 (/nexus) 中 - 您拥有该容器之外的所有必需信息。现在启动/创建带有已安装卷(nexus-data)并分配所需端口 8081 的新 NEXUS 容器,因为此时您的 8081 端口是空闲的(旧的 nexus-container 已停止)
  • 确实,数据的存储与你的 nexus 容器监听的端口几乎没有关系。您可以在不丢失数据的情况下启动和停止容器
  • 对我来说,docker copy /nexus-data/* &lt;container-name-or-id&gt;:/nexus-data 不起作用,docker cp /nexus-data/. &lt;container-name-or-id&gt;:/nexus-data 起作用。 Copying files from host to Docker container - Stack Overflow.
【解决方案2】:

这是另一种方法,我刚刚成功地使用了Heimdall 容器。在documentation for the sonatype/nexus3 image 中有概述:

  1. 停止正在运行的容器(例如命名为nexus3
  2. 创建一个名为 nexus-data 的 docker 卷,使用以下命令创建它:docker volume create nexus-data)
  3. 默认情况下,Docker 会将卷的内容存储在/var/lib/docker/volumes/nexus-data/_data/
  4. 只需将您之前使用绑定挂载的目录复制到上述卷目录(您需要超级用户权限才能执行此操作,或者该用户是docker 组的一部分):@987654328 @
  5. 使用$ docker run -v nexus-data:/nexus-data sonatype/nexus3 --name=nexus3 重新启动nexus3 容器
  6. 您的容器将备份并运行,保存在目录/path/to/nexus-data/ 中的文件现在已镜像到 docker 卷中。当然,检查功能是否相同,如果是,您可以删除/path/to/nexus-data/目录

Q.E.D.

【讨论】:

    猜你喜欢
    • 2018-12-30
    • 2018-09-25
    • 2020-05-05
    • 2020-08-13
    • 2020-04-08
    • 1970-01-01
    • 2021-02-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多