Apple M1 ARM64下构建.NET Core 2.2 Docker镜像报/proc/self/exe错误求助
问题根因
报错的核心原因是.NET Core 2.2官方仅提供x86架构的镜像,无原生ARM64版本支持。你指定linux/arm64/v8平台拉取的alpine3.8变体镜像实际仍为x86架构二进制,在ARM容器环境中无法正常执行,因此触发Failed to resolve full path of the current executable [/proc/self/exe]错误。
可行解决方案
方案1:临时兼容方案(无需修改代码/SDK版本,适合本地开发调试)
直接强制Docker使用x86_64架构模拟构建,M1芯片的Docker Desktop默认支持Rosetta 2转译运行x86容器,仅需修改构建命令即可:
docker buildx build --platform linux/amd64 -t MyContainer.azurecr.io/admin-api-web:development ./backend -f ./backend/Admin.Api.Web.Dockerfile
构建出的镜像是x86架构,可在M1设备本地正常运行,也可直接部署到常规x86架构的服务器使用。
方案2:长期原生兼容方案(原生支持ARM64架构)
将项目的.NET Core 2.2升级到官方支持ARM64架构的版本,最低可选择.NET 3.1,推荐升级到.NET 6或更高的LTS版本,修改Dockerfile中的基础镜像对应版本即可原生支持ARM64构建与运行,无转译性能损耗。
方案3:多架构构建方案(需升级.NET版本)
如果需要同时输出x86和ARM64架构的镜像,升级.NET到支持ARM64的版本后,使用buildx的多架构构建参数即可:
docker buildx build --platform linux/amd64,linux/arm64/v8 -t MyContainer.azurecr.io/admin-api-web:development ./backend -f ./backend/Admin.Api.Web.Dockerfile --push
内容的提问来源于stack exchange,提问作者Thamy Bessa
相关产品推荐
相关产品推荐

