You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 03:11:06