当前位置: 首页 > news >正文

睡前讲一段docker编译镜像的故事

最近在和团队的工程师开发一些创新项目,我需要把本地项目打包成docker镜像,并且推送得到AWS云服务上的镜像仓库(ECR)。
我写好Dockerfile之后就开始先编译,然后再推送。命令如下所示:

docker build -t ai-service:latest .
docker tag ai-service:latest XXXXX.dkr.ecr.us-east-1.amazonaws.com/ai-service:latest
docker push XXXXX.dkr.ecr.us-east-1.amazonaws.com/ai-service:latest

一切看似顺利,但当我使用这个容器镜像来创建EC2(我选择了t3.micro)的时候,却遇到了镜像和系统平台不兼容的报错,具体如下所示:

latest: Pulling from smart-inventory
no matching manifest for linux/amd64 in the manifest list entries

可以看出EC2的系统是linux/amd64的,而我的笔记本电脑是MacOS M1芯片,是arm64的架构。Docker默认编译出来的镜像是基于所在平台的,也就是说用MacOS M1编译出的镜像也是arm架构。
解决这个问题十分简单,Docker提供了强大的buildx工具,可以在编译的时候指定编译出的架构。
例如我想编译出适合linxu/amd64的镜像,可以用如下命令:

docker buildx build --platfom linux/amd64 -t ai-service:latest .

这样编译出来的镜像就能在linux/amd64架构的机器上运行了。

仔细再想一想,为什么之前我没有遇到这个问题呢?
原因是因为我并不是直接在我本地电脑上编译镜像并推送到远端镜像库的,我们通常是通过持续集成系统(CI/CD)来完成的。在CI/CD流程中,我们使用的是amd64架构的虚拟机来完成镜像编译,这样编译出的镜像都是amd64的。
所以如果我要坚持在本地编译镜像来推送,则需要先判断当前系统是否是MacOS,如果是,则使用“--platform linux/amd64”参数完成编译即可,用Python实现如下所示:

  if os.name == 'posix' and 'darwin' in os.uname().sysname.lower():# On macOS, build for linux/amd64 platformbuild_cmd = ["docker", "buildx", "build", "--platform", "linux/amd64", "-t", image_name, "."]else:build_cmd = ["docker", "build", "-t", image_name, "."]

每次遇到问题,我总是想多思考一下背后的原因,有点像挖金矿一样,收获蛮大。
王阳明说:人须在事上磨,方立得住,方能静亦定,动亦定。
我还需要继续磨励,继续专研,把事儿做好。走好脚下路的,才能有好未来。

http://www.jsqmd.com/news/379588/

相关文章:

  • 论文降重避坑指南:如何确保 AI 率降至 10% 且不被收录? - 品牌观察员小捷
  • QT UDP网络编程
  • Open-AutoGLM项目实战:在Android设备上构建自动操作与ADB键盘控制
  • 拒绝论文“被收录”风险:2026年最安全的论文降AI率平台深度解析 - 品牌观察员小捷
  • 2026年AIGC痕迹消除与降重实测:为何网易有道“学术猹”能成为行业标杆? - 品牌观察员小捷
  • 《从程序员到CTO沟通说话的力量:技术人有效说服他人的沟通策略与技巧》1
  • 现代C++实现AVL树
  • 西门子数控6FC5373-0AA00-0AA2模块故障代码维修
  • 计算机Java毕设实战-基于web的动物救助网站【完整源码+LW+部署说明+演示视频,全bao一条龙等】
  • 《CF708E Student‘s Camp》
  • 【课程设计/毕业设计】基于web的动物救助网站【附源码、数据库、万字文档】
  • Java计算机毕设之基于web的动物救助网站(完整前后端代码+说明文档+LW,调试定制等)
  • Java算法每日一题
  • 如何学习Java AI ?
  • 【毕业设计】基于Springboot的植物健康管理系统设计与实现(源码+文档+远程调试,全bao定制等)
  • flask
  • MAF快速入门(16)用户智能体交互协议AG-UI(上)
  • 详细介绍:HTTP/HTTPS 协议基础详解
  • 【毕业设计】基于web的动物救助网站(源码+文档+远程调试,全bao定制等)
  • 【计算机毕业设计案例】基于web的动物救助网站(程序+文档+讲解+定制)
  • Java毕设选题推荐:基于Springboot的智能养护植物健康管理系统设计与实现【附源码、mysql、文档、调试+代码讲解+全bao等】
  • 快来看2026市面上混合机供应商口碑排行里的潜力之选,混合机/Z型斗提机/摇摆筛/超声波振动筛,混合机直销厂家推荐排行榜 - 品牌推荐师
  • 决绝
  • 信息论与编码---离散无记忆信道的容量
  • 【计算机毕业设计案例】基于Springboot的植物生长环境植物健康管理系统设计与实现(程序+文档+讲解+定制)
  • 计算机Java毕设实战-基于Springboot的植物健康植物档案管理、智能养护提醒、病虫害管理系统设计与实现【完整源码+LW+部署说明+演示视频,全bao一条龙等】
  • Docker 安装 Python
  • 8:【Git误删】git reflog找回删除文件/ commit
  • 2026年2月分析仪供应商推荐,热门厂商排行抢先看,测厚仪/测定仪/测量仪/分析仪/扭矩仪,分析仪生产商怎么选择 - 品牌推荐师
  • 【课程设计/毕业设计】基于Springboot的植物健康温湿度、光照管理系统设计与实现【附源码、数据库、万字文档】