You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

将Docker绑定挂载(bind-mount)迁移至Volume的方法咨询

迁移绑定挂载数据到Docker管理Volume的可行方案

当然有靠谱的办法能完成这个迁移,而且完全不会丢失数据,我给你拆成几步来操作,每一步都很清晰:

  • 第一步:停止正在运行的Nexus容器
    首先得把当前用绑定挂载运行的Nexus容器停掉,避免复制数据的时候有文件正在被写入,导致数据不一致。

    1. 先找到容器的ID或名称:docker ps
    2. 停止容器:docker stop <你的容器ID或名称>
      如果之后不再需要这个旧容器,也可以直接删除它:docker rm <你的容器ID或名称>
  • 第二步:创建Docker管理的Volume
    执行这条命令创建你想要的nexus-data volume:

    docker volume create nexus-data
    
  • 第三步:复制绑定挂载的数据到新Volume
    这里推荐用临时容器来完成复制,这是Docker官方更推荐的方式,比直接找volume的宿主机路径复制更规范,还能保证权限和文件属性完整保留。执行这条命令:

    docker run --rm -v /nexus-data:/source -v nexus-data:/destination busybox cp -av /source/. /destination/.
    

    解释下这条命令:

    • --rm:容器执行完命令后自动删除,不用手动清理
    • -v /nexus-data:/source:把你宿主机上的绑定挂载目录挂载到临时容器的/source目录
    • -v nexus-data:/destination:把刚创建的Docker volume挂载到临时容器的/destination目录
    • cp -av-a是归档模式,保留文件权限、所有者、时间戳等所有属性;-v显示复制过程,方便你确认进度
  • 第四步:验证数据复制结果
    为了确保数据都复制过去了,可以用临时容器查看volume里的内容:

    docker run --rm -v nexus-data:/data busybox ls -la /data
    

    对比一下和你宿主机/nexus-data目录下的文件,确认内容一致。

  • 第五步:用新Volume启动Nexus容器
    现在就可以用你想要的方式启动容器了:

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

    启动后登录Nexus后台,检查一下仓库配置、已上传的包等数据是否都正常,确认迁移成功。

额外注意事项

  • 一定要确保原Nexus容器已经完全停止后再复制数据,不然可能会有部分数据没同步过去
  • busybox复制数据会保留原文件的权限,Nexus容器默认用UID为200的nexus用户运行,复制后的文件权限会让这个用户正常访问,不用额外调整权限

内容的提问来源于stack exchange,提问作者fmdaboville

火山引擎 最新活动