Apple Silicon M1上Docker构建无法找到msodbcsql17包该如何解决
M1芯片Docker构建无法找到msodbcsql17包解决方案
问题原因
Apple Silicon M1属于ARM64架构,微软官方未发布适配ARM64架构Ubuntu 18.04版本的msodbcsql17、mssql-tools安装包,所以APT检索对应资源失败,导致构建报错退出。
解决方案
方案1:模拟x86架构运行(无代码修改,兼容性最高)
直接强制Docker使用x86_64架构转译运行,依赖MacOS自带的Rosetta2转译层完成兼容:
- 单独构建镜像时执行命令:
docker buildx build --platform linux/amd64 . - 使用docker-compose构建时,在
laravel-app服务配置块中添加平台指定参数即可,原有其他配置不用修改:
services: laravel-app: platform: linux/amd64 # 此处保留你原有laravel-app服务的所有配置
该方案的缺点是转译运行会损失部分性能,性能比原生ARM运行低20%左右。
方案2:原生ARM适配(性能最优)
需要调整Dockerfile内容使用适配ARM的ODBC版本:
- 将基础镜像从Ubuntu 18.04升级到Ubuntu 22.04及以上版本
- 把原有安装命令中的
msodbcsql17替换为msodbcsql18,微软从18版本开始提供ARM64架构的官方安装包 - 调整完后重新构建即可原生运行,性能损失极小
如果业务逻辑强制要求依赖ODBC 17版本,该方案不适用。
方案3:移除不需要的依赖
如果你的项目不需要对接SQL Server数据库,直接从APT安装列表中删除msodbcsql17、mssql-tools两个包即可正常构建。
内容的提问来源于stack exchange,提问作者Felipe Brito
相关产品推荐
相关产品推荐

