Docker Compose在Mac上运行时出现空指针引用崩溃问题求助
M1 Mac上Docker Compose构建出现空指针panic问题排查与解决
问题详情
单体仓库配置的Docker Compose在Linux机器上正常运行,但在M1 Mac执行docker compose up时触发空指针panic,错误栈指向Docker Buildx组件。
目录结构
.env docker-compose.yaml /client Dockerfile packages.json /src /public
docker-compose.yaml
version: "3.9" services: reactjs: build: ./client container_name: reactjs ports: - "3000:3000" # volumes: # - reactjs-data:/var/www
client/Dockerfile
FROM node:alpine EXPOSE 3000 RUN apk add --no-cache bash RUN apk update RUN apk upgrade WORKDIR /var/www CMD npm run start
错误日志
panic: runtime error: invalid memory address or nil pointer dereference [signal SIGSEGV: segmentation violation code=0x2 addr=0x39 pc=0x10526d690] goroutine 11 [running]: github.com/docker/buildx/builder.(*Builder).Validate(0x10646d8a0?) github.com/docker/buildx@v0.10.4/builder/builder.go:111 +0x20 github.com/docker/buildx/builder.New({0x10646d8a0?, 0x140000cc100}, {0x0, 0x0, 0x1400027ad50?}) github.com/docker/buildx@v0.10.4/builder/builder.go:101 +0x290 github.com/docker/compose/v2/pkg/compose.(*composeService).doBuildBuildkit(0x1400052e360, {0x10645cd80, 0x14000532aa0}, 0x0?, {0x105c0f2b3, 0x4}) github.com/docker/compose/v2/pkg/compose/build_buildkit.go:36 +0x68 github.com/docker/compose/v2/pkg/compose.(*composeService).build.func1({0x10645cd80, 0x14000532aa0}, {0x14000360e60, 0x7}) github.com/docker/compose/v2/pkg/compose/build.go:112 +0x5b4 github.com/docker/compose/v2/pkg/compose.(*graphTraversal).run.func1() github.com/docker/compose/v2/pkg/compose/dependencies.go:127 +0x5c golang.org/x/sync/errgroup.(*Group).Go.func1() golang.org/x/sync@v0.1.0/errgroup/errgroup.go:75 +0x5c created by golang.org/x/sync/errgroup.(*Group).Go golang.org/x/sync@v0.1.0/errgroup/errgroup.go:72 +0xa0
环境信息
Docker version 23.0.5, build bc4487a Docker Compose version v2.17.3 MacBook Pro M1 16Go, macOs Ventura 13.0.1 Docker Desktop is running, version Docker Desktop 4.19.0 (106363)
解决步骤
1. 临时禁用BuildKit
该panic是BuildKit在M1架构下的兼容性bug,临时禁用即可绕过:
DOCKER_BUILDKIT=0 docker compose up
2. 永久禁用BuildKit(可选)
修改~/.docker/config.json,添加以下配置后重启Docker Desktop:
{ "features": { "buildkit": false } }
3. 更新Docker Desktop到最新版本
旧版本Docker Desktop的BuildKit组件存在M1架构适配问题,更新到最新版本可修复该bug:
打开Docker Desktop → 设置 → 检查更新,安装完成后重启应用。
4. 指定容器平台架构
在docker-compose.yaml中明确指定服务的平台架构,强制匹配M1的arm64:
services: reactjs: build: context: ./client platform: linux/arm64 container_name: reactjs ports: - "3000:3000"
5. 重置Buildx Builder配置
若之前手动配置过Buildx Builder,可能存在配置异常:
- 列出当前builder:
docker buildx ls - 删除异常builder:
docker buildx rm <builder-name> - 重建默认builder:
docker buildx create --use
内容的提问来源于stack exchange,提问作者rpoder
相关产品推荐
相关产品推荐

