macOS下Docker Desktop构建.NET 8容器报错:找不到docker/podman可执行文件
解决Docker Compose构建.NET 8项目时的容器构建错误
问题根源
你的.NET 8项目引用了Microsoft.NET.Build.Containers NuGet包,该包会让dotnet publish自动尝试构建并推送Docker镜像。但在Docker镜像的构建阶段(容器内部)没有Docker客户端,也无法访问本地Docker守护进程,因此触发Cannot find docker/podman executable和local registry is not available错误。
解决方法
方法一:在publish命令中禁用自动容器构建
修改Dockerfile中的dotnet publish命令,添加/p:ContainerBuild=false参数,强制关闭.NET的自动容器构建功能:
RUN dotnet publish -c release --no-restore -o /app -r linux-x64 --self-contained false --no-build /p:ContainerBuild=false
修改后重新执行sudo docker compose up -d即可。
方法二:移除项目中的容器构建NuGet包
如果你的项目不需要通过dotnet publish直接生成Docker镜像,可以卸载Microsoft.NET.Build.Containers包:
dotnet remove package Microsoft.NET.Build.Containers
执行命令后重新生成项目,再运行Docker Compose命令即可正常构建。
方法三:Docker-in-Docker配置(不推荐)
如果确实需要在构建容器内运行Docker,需要在Dockerfile中安装Docker客户端,并挂载本地Docker守护进程的套接字。但这种配置复杂且存在安全风险,仅适用于特殊场景,一般不推荐用于当前场景。
内容的提问来源于stack exchange,提问作者Carlos Ramírez
相关产品推荐
相关产品推荐

