Github Actions构建arm64 Docker镜像时出现'docker not found'错误
解决GitHub Actions构建arm64 Docker镜像时的
docker: not found错误 错误原因
你遇到的docker: not found是因为运行elgohr/Publish-Docker-Github-Action的环境中缺少Docker CLI。GitHub Hosted Runner(如ubuntu-latest)默认自带Docker,但跨架构构建(如arm64)需要额外配置Docker Buildx和QEMU模拟,且旧版第三方action可能未自动适配环境依赖。
解决方案步骤
1. 修正GitHub Workflow配置
建议替换第三方action为官方Docker工具链,确保环境兼容性和跨架构支持:
jobs: build-and-push: runs-on: ubuntu-latest steps: - name: 拉取代码 uses: actions/checkout@v4 # 初始化Docker Buildx,支持多架构构建 - name: 设置Docker Buildx uses: docker/setup-buildx-action@v3 # 登录GitHub容器注册表 - name: 登录GHCR uses: docker/login-action@v3 with: registry: ghcr.io username: ${{ github.actor }} password: ${{ secrets.GITHUB_TOKEN }} # 构建并推送多架构镜像 - name: 构建推送镜像 uses: docker/build-push-action@v5 with: context: . platforms: linux/amd64, linux/arm64 push: true tags: ghcr.io/${{ github.repository }}:latest
官方docker/build-push-action会自动处理Docker CLI依赖,且对跨架构构建的支持更稳定。
2. 无需修改Dockerfile安装Docker
你的应用镜像不需要在Dockerfile中安装Docker——Dockerfile的作用是打包Next.js应用,安装Docker属于Docker-in-Docker场景,这是CI环境的配置问题,和应用镜像本身无关。
3. GitHub Actions中处理docker.sock挂载
如果CI流程需要在容器内调用宿主机Docker:
- GitHub Hosted Runner默认提供可用的Docker daemon,直接在workflow步骤中运行
docker命令即可,无需手动挂载docker.sock。 - 若使用自定义runner,需确保runner已安装Docker,且workflow执行用户有权限访问
/var/run/docker.sock。
额外:Prisma迁移的优化建议
bootstrap.sh中的Prisma迁移命令建议单独作为CI步骤执行(构建镜像前或部署后),避免在容器内依赖外部资源:
steps: # ... 其他步骤 ... - name: 安装依赖 run: npm install - name: 执行Prisma迁移 run: npx prisma migrate deploy env: DATABASE_URL: ${{ secrets.DATABASE_URL }}
内容的提问来源于stack exchange,提问作者Matic
相关产品推荐
相关产品推荐

