- 楼主 编辑于
写在最前面
写这个项目的初衷就是为了帮大家更简单的迁移 Docker。毕竟作为一名 MJJ,迁移 Docker 是常有的事。但是每次都要手动一个一个的迁移还是太费劲了,而且还常常因为各种问题导致出错。于是这个项目便诞生了。只需要跟着提示一步一步的运行,你就能迁移你的所有 docker 服务,简单好用的一批。至于项目本身的可靠性方面,这个项目并不是临时起意,也不是草草 vibe coding 了一下就拿来给大家的,项目本身我已经打磨了几个月,项目开始我就设计好了完整的架构。按照架构一步步实现的,而且 AI 写的重要代码,我也会自己 review,确保没问题了再上线。所以,大家可以放心使用。 最后,希望这个项目能给大家带来一点点的帮助吧。如果有帮到你,也希望能给项目点个免费的 star。万分感谢!只需两步,完整迁移你的 Docker 服务
是什么?DockHop 是一个 Docker 迁移工具:一个脚本即可完整迁移你的 docker 服务,迁完就能直接用。主打安全、可靠、易用。
特点
- 简单:两台服务器运行同一条命令,一台选「迁出」,一台选「迁入」,按步骤即可完成迁移。不用记配置、不用记参数、这些都由脚本来搞定。
- 完整迁移:镜像、数据卷、挂载目录、端口、环境变量、网络、Compose 项目都会迁移,容器里改过的文件也不丢。完整迁移
- 可靠:严格的测试流程,保证使用的可靠性。你能想到的问题点,我都有考虑。
- 安全:数据加密传输,不怕中间人劫持或篡改。保证迁移安全。给你满满的安全感。
- 干净:只需要 Docker,不需要安装其他依赖;运行过程中的中间产物,包括脚本自身也是用完即删。不会在服务器上面乱拉屎
快速开始
在旧服务器和新服务器上运行同一条命令:
bash <(curl -fsSL https://dockhop.run)第一步,旧服务器:选
1. 迁出,选好要迁的服务。打包完会显示一条迁移链接,复制它。这个窗口先别关,新服务器要从这里下载数据。第二步,新服务器:选
2. 迁入,粘贴刚才复制的链接。检查、下载、恢复都会自动完成,迁入成功后旧服务器那边也会自动结束。[!NOTE]
迁移链接里含有解密密钥,不要发给别人。[!TIP]
新服务器连不上,几乎都是旧服务器没有放行端口(默认 TCP 8080)。在云服务商的安全组和服务器防火墙里放行就行。迁移哪些东西
- 镜像:和旧服务器上的版本一模一样。新服务器上已经有、或者能从镜像仓库拉到同一个镜像时,就不从旧服务器传
- 数据卷、挂载的目录和文件,属主和权限保持不变
- 容器里没挂载出来、但改过的文件
- 端口、环境变量、启动命令、重启策略、资源限制、健康检查等全部运行参数
- 自定义网络、固定 IP、网络别名
- Docker Compose 项目:整个项目目录和它引用的文件,迁移后照常
docker compose up -d - 容器原来的状态:运行、暂停或停止
系统要求
- Linux,x86_64、arm64 或 armv7,用 root 运行
- Docker 20.10 或更新的版本
- 迁移 Compose 项目时,新服务器要装好
docker compose - 一行命令需要
curl(或wget)和sha256sum,常见的发行版都自带 - 新服务器要能连上旧服务器的一个 TCP 端口(默认 8080)
更多用法
一般按菜单走就够了。需要的时候,把选项加在命令后面,例如:
bash <(curl -fsSL https://dockhop.run) out --port 9000选项 作用 out --port 端口下载服务用的端口,默认 8080。安全组只放行了某个端口时用它 out --host 地址链接里用的 IP 或域名。自动探测不准(NAT、多网卡),或者想走内网时用 out --include a,b只迁移这几个容器(或它们所在的 Compose 项目),不显示菜单 out --stop-shared允许临时停掉和所选容器共用数据的其他容器,打包完自动恢复 in --yes检查发现的问题自动按推荐的方式处理 in --existing replace|skip|fail新服务器已有同名服务时:替换、保留已有的,或者停止迁入 in --keep-succeeded有服务起不来时,保留已经正常运行的,只删除起不来的 环境变量 作用 DOCKHOP_HOMEDockHop 放文件的目录,默认 ~/.dockhop。系统盘不够大时,换到大一点的盘DOCKHOP_MIRROR下载程序用的镜像站。不设置时,国内先用 Gitee,其他地方先用 GitHub DOCKHOP_NO_STATS=1不统计、也不显示迁移次数 完整说明见
dockhop --help。项目地址:https://github.com/lx969788249/dockhop 欢迎来点个免费的 star
收藏 2支持 1反对打赏
路过水一贴,帮顶
个性签名搏一搏,单车变摩托,赌一赌,摩托变路虎。不怕输的苦,就怕断了赌。小赌养家糊口,大赌发家致富!
项目真不错
可能有用 周末研究下
@gork 帮我看看好不好用
gork:能用,但别被「两步、安全、满满的安全感」哄睡着。这就是个给自己两台机器搬家的便利脚本,不是保险箱。
它想解决的事是真的烦:镜像、卷、挂载目录、端口、环境变量、网络、Compose,外加容器里没挂出来却改过的文件。这些要是手撸,漏一个就够你重装一晚上。菜单选迁出 / 迁入,用完把临时文件删掉,这个方向没毛病。楼主后面也认了该加 IP 白名单,说明不是完全不听人说话。
坑在威胁模型,不是在文案:
- 安装方式是
bash <(curl ...),还得 root。远程脚本直接在机器上跑,你连看都没看。要装就去 GitHub 把脚本和发布物对一下,别闭眼管道。 - 帖里写「数据加密传输」,楼底下自己又说包是加密的,再套一层没必要。链接里就带着解密密钥。服务开着的时候,谁拿到完整链接,谁就能下下来解开。这不叫传输加密,这叫「密钥写在门牌上」。
- 默认公网 TCP 8080,快速开始里没有账号密码,也没有白名单。白名单是 #17 说的「后续更新」,你用之前自己看仓库里有没有,别把承诺当已上线。
- 迁出那个窗口别关、链接别贴聊天、别截图。迁完把安全组和防火墙的口子关上。新机连不上,十有八九就是 8080 没放行,这点帖里写对了。
- 和别的容器共用数据时,
--stop-shared会临时把那些容器停掉。Compose 项目新机器还得自己装好 compose。架构不一样(x86 迁 arm)别指望镜像原样就能跑。
所以:自己的机器、不重要的栈,先迁一个试试,能起来再搬正经服务。链接当密码看,8080 只对新服务器放行。真有不能见光的数据,这套「窗口开着等人来拉」就不该碰。周末研究可以,无脑「放心使用」就算了。
共 2 条回复- 安装方式是
@gork 帮我看一下这个项目代码怎么样
gork:没看过仓库里的最新代码,不会假装逐行审过。只按你帖子里的设计和你自己在楼里认的那几条说,别把「我 review 过 AI 写的代码」当成代码质量证明。
这东西是 root 下的搬家脚本,不是安全产品。能用,坑也写在脸上。
安装就是
bash <(curl ...),还要 root。脚本、二进制、镜像站(Gitee/GitHub)任何一环被换,两边机器一起交出去。要跑就先把仓库和发布物对上再执行,别闭眼管道。「加密传输」和实现不是一回事。你自己说了:包是加密的,链接里带着解密密钥,传输不再套一层。服务开着时,完整链接等于密码写在地址上。默认公网 TCP 8080,快速开始里没有账号、没有白名单。白名单是你在 #17 说的「后续更新」,用之前看仓库里有没有,没有就当没有。
迁移面太大,最容易翻车的不是文案,是边界:和别的容器共用卷时
--stop-shared会临时停别人;容器里没挂出来的改动靠导出层,overlay、匿名卷、bind mount、权限、SELinux 很容易漏;x86 迁 arm 镜像不会魔法变可运行;新机器没装 compose,Compose 项目迁过去也起不来。这些帖里写了,脚本再「两步」也省不掉。所以:自己的机器、不重要的栈,先迁一个能起来再搬正经的。链接当密码,窗口别关、别贴、别截图,迁完把端口关上。不能见光的数据,别用「窗口开着等人来拉」这套。代码怎么样,得看仓库现在的实现,不是看 README 里的安全感。
共 1 条回复拿个烧饼


!
这么尖锐吗