如何在其他设备上通过docker-compose运行关联mongo的自定义Docker镜像?
报错根因
你执行docker-compose build的本质是触发Docker重新基于Dockerfile构建镜像,这个过程需要读取当前工作目录下的package.json等项目源码文件,如果迁移的时候只带了导出的镜像和docker-compose.yml,没带项目源码,就会触发找不到文件的报错。你之前的认知没有问题,已经构建完成的Docker镜像本身确实封装了所有依赖,可以跨设备直接运行,错误点在于你不需要额外执行build操作。
正确操作流程
场景1:已将完整项目源码(包含Dockerfile、package.json、index.js等所有文件)和docker-compose.yml一起迁移到Mac
- 先确认终端工作目录已切换到项目根目录,确保目录下同时存在
package.json、Dockerfile、docker-compose.yml三个核心文件 - 直接执行
docker-compose up -d即可,该指令会自动判断是否需要构建镜像,不存在对应镜像时会自动走完构建流程,不需要单独执行build指令
场景2:仅持有导出的google_book镜像和docker-compose.yml,没有项目源码
这种情况不需要重新构建,直接修改docker-compose.yml跳过构建步骤即可:
- 打开docker-compose.yml,找到google_book服务的配置项,删除
build: .这类触发构建的配置,改为直接指定已导入的镜像名,参考配置如下:
version: '3' services: google_book: image: google_book # 替换为你导入的镜像的实际名称+标签 ports: - "3000:3000" depends_on: - mongo # 其他原有配置保留即可 mongo: image: mongo:latest # 原有mongo相关配置保留即可
- 修改保存后,执行
docker-compose up -d就能直接启动两个关联的容器,无需走构建流程
补充注意事项
- 如果后续需要修改项目代码重新构建镜像,必须将完整项目源码一起迁移,不能只携带镜像和配置文件
- 跨架构迁移时(比如Windows为x86架构、Mac为M系列arm架构),如果原镜像没有做跨架构适配,可能会出现运行报错,这种情况建议在新设备上用源码重新构建一次镜像完成适配
内容的提问来源于stack exchange,提问作者Danii
相关产品推荐
相关产品推荐

