将 docker bind-mount 移动到卷

fmd*_*lle 6 volumes docker

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

docker run -v /nexus-data:/nexus-data sonatype/nexus3
              ^
Run Code Online (Sandbox Code Playgroud)

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

docker run -v nexus-data:/nexus-data sonatype/nexus3
              ^
Run Code Online (Sandbox Code Playgroud)

我想将我现有的绑定安装转移到卷。

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

fly*_*rix 7

您可以尝试以下步骤,这样您就不会丢失当前的nexus-data.

#>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>
Run Code Online (Sandbox Code Playgroud)

docker cp会将数据从主机文件/nexus-data夹复制到容器的 FS/nexus-data文件夹(即已安装的卷)。

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

  • 对我来说,“docker copy /nexus-data/* &lt;container-name-or-id&gt;:/nexus-data”不起作用,“docker cp /nexus-data/”。&lt;container-name-or-id&gt;:/nexus-data` 有效。[将文件从主机复制到 Docker 容器 - Stack Overflow](/sf/ask/1603506201/)。 (3认同)
  • 停止第一个 NEXUS 容器(实际上正在使用 8081),因为该容器已经将数据存储在主机的目录 (/nexus) 中 - 您拥有该容器之外的所有必需信息。现在启动/创建带有已安装卷(nexus-data)的新 NEXUS 容器并分配所需的端口 8081,因为此时您的 8081 端口是空闲的(旧的 nexus-container 已停止) (2认同)