Budibase/budibase · error

Unable to retrieve docker-compose file - ${response.status}

Error message

Unable to retrieve docker-compose file - ${response.status}

What it means

downloadFile streams an HTTP response (e.g. the docker-compose file) into a file on disk. If the response completed but has no body to pipe, it throws with the response status, indicating the remote resource could not be retrieved.

Source

Thrown at packages/cli/src/utils.ts:21

import path, { join } from "path"
import fetch from "node-fetch"

const progress = require("cli-progress")

export function downloadFile(url: string, filePath: string) {
  return new Promise((resolve, reject) => {
    filePath = path.resolve(filePath)
    fetch(url, {
      method: "GET",
    })
      .then(response => {
        const writer = fs.createWriteStream(filePath)
        if (response.body) {
          response.body.pipe(writer)
          response.body.on("end", resolve)
          response.body.on("error", reject)
        } else {
          throw new Error(
            `Unable to retrieve docker-compose file - ${response.status}`
          )
        }
      })
      .catch(err => {
        throw err
      })
  })
}

export async function httpCall(url: string, method: string) {
  const response = await fetch(url, {
    method,
  })
  return response.body
}

export function getHelpDescription(str: string) {

View on GitHub (pinned to a81a902e9a)

Solutions

  1. Check the reported status code in the message and curl the docker-compose URL to confirm availability
  2. Fix network/proxy settings so the host is reachable, then re-run
  3. Pin/update the CLI to a version pointing at a valid docker-compose URL
  4. Retry later if the remote server is temporarily down

Example fix

// diagnose
curl -I https://raw.githubusercontent.com/Budibase/budibase/master/hosting/docker-compose.yaml
// if 404, update CLI to a version with the corrected URL, then re-run
Defensive patterns

Strategy: try-catch

Validate before calling

const head = await axios.head(COMPOSE_URL)
if (head.status >= 300) throw new Error(`Compose file unavailable: ${head.status}`)

Try / catch

try {
  await downloadFile(COMPOSE_URL, "./docker-compose.yaml")
} catch (err) {
  if ((err as Error).message.startsWith("Unable to retrieve docker-compose file")) {
    // inspect status in message; check network/proxy, then retry or use a vendored compose file
  } else throw err
}

Prevention

When it happens

Trigger: Calling the CLI utility that downloads the docker-compose file when the axios-style response resolves without a body — typically 4xx/5xx statuses (404, 502) or an empty/failed response for the compose URL.

Common situations: URL for docker-compose moved or 404s; proxy/VPN returning an error page with no body; server outage returning 5xx; offline machine where the request errors out.

Related errors


AI-assisted analysis of Budibase/budibase@a81a902e9a (2026-08-29). Data as JSON: /api/errors/efb00d7742a75c6c. Report an issue: GitHub.