Docker compose build 出現 failed to solve with frontend dockerfile.v0 錯誤

執行 docker compose build 的時候,有時會看到類似這樣的錯誤訊息

$ docker compose build
[+] Building 0.1s (2/2) FINISHED
 => [internal] load build definition from Dockerfile                                  0.0s
 => => transferring dockerfile: 32B                                                   0.0s
 => [internal] load .dockerignore                                                     0.0s
 => => transferring context: 2B                                                       0.0s
failed to solve: rpc error: code = Unknown desc = failed to solve with frontend
dockerfile.v0: failed to create LLB definition: target stage my-tool could not be found

這有幾個可能性。如果 docker-compose.yml 中有 build 設定,而且也有設定 target,可先檢查指定的 target 是否正確(參照:multi-stage builds),或試著不使用 target

version: '3.4'
services:
  my-tool:
    build:
        context: .
        target: my-tool  # 檢查是否有名為 my-tool 的 stage
    container_name: mytool
    volumes:
      - .:/app

再來也可能踩到 docker compose 的 bug,如果 build 設定前面有其他欄位,嘗試把 build 拉到該 service 的第一個位置。

version: '3.4'
services:
  my-tool:
    container_name: mytool
    build: .
    volumes:
      - .:/app
version: '3.4'
services:
  my-tool:
    build: .
    container_name: mytool
    volumes:
      - .:/app

也可能是踩到 BuildKit 的 bug,告訴 docker compose 不使用 buildkit 有機會解決。

$ DOCKER_BUILDKIT=0 docker compose build