Describe the Bug
A fresh clone + docker compose up -d produces a stack where the api
service never starts, while worker, redis, and puppeteer-service come up
fine. docker compose build && docker compose up -d works.
The cause is not the source. docker compose up pulls the published
trieve/firecrawl:latest image, which was built 2024-09-06 and no longer
starts.
To Reproduce
System
- Docker Desktop on Windows (Windows Containers backend)
git clone https://github.com/devflowinc/firecrawl-simple.git
cd firecrawl-simple
docker compose up -d
docker compose ps # api is absent
docker compose logs api
Logs
api-1 | Error: Cannot find matching keyid: {"signatures":[...],"keys":[...]}
api-1 | at verifySignature (/usr/local/lib/node_modules/corepack/dist/lib/corepack.cjs:21535:47)
api-1 | at fetchLatestStableVersion (/usr/local/lib/node_modules/corepack/dist/lib/corepack.cjs:21553:5)
api-1 | at async Engine.getDefaultVersion (...)
api-1 | at async Engine.executePackageManagerRequest (...)
api-1 | Node.js v20.17.0
Why
docker-compose.yaml gives the api service both an image: and (via the
x-common-service anchor) a build::
x-common-service: &common-service
build: apps/api
services:
api:
image: trieve/firecrawl
<<: *common-service
worker:
<<: *common-service # no image: key
When a service declares both, Compose pulls the named image if it isn't already
local and only builds as a fallback. So api runs the registry artifact;
worker — which has no image: key — always builds from source. Hence one
starting and the other not, from the same Dockerfile.
The published image predates npm's registry signing-key rotation, so its
bundled corepack can't verify the pnpm download and exits before the app runs.
Evidence
Comparing the pulled image against a local build of the same Dockerfile:
|
trieve/firecrawl:latest (pulled) |
local docker compose build |
| Created |
2024-09-06 |
2026-07-15 |
| Node |
v20.17.0 |
v20.20.2 |
| corepack |
0.29.3 |
0.35.0 |
packageManager in /app/package.json |
pnpm@9.9.0 |
pnpm@9.12.3 |
docker pull trieve/firecrawl:latest
docker image inspect trieve/firecrawl:latest --format '{{.Created}}'
# 2024-09-06T14:14:32.200421433-07:00
docker run --rm --entrypoint sh trieve/firecrawl:latest -c 'node --version; corepack --version'
# v20.17.0
# 0.29.3
apps/api/Dockerfile already does RUN npm install -g pnpm corepack@latest, so
a current build picks up corepack with the rotated keys. The Dockerfile is
fine — the published image just predates it.
Workaround
docker compose build && docker compose up -d
# or
docker compose up -d --build
Possible fixes
Depends on your intent for the published image:
- If
trieve/firecrawl:latest is meant to be a supported artifact — it
needs rebuilding and republishing, and probably a CI job so it doesn't drift
again. Note apps/api/Dockerfile uses FROM node:20-slim unpinned, so the
image's Node version is whatever the tag resolved to at build time (20.17.0
here).
- If building locally is the expected path — the
image: key on api is a
trap. Either drop it (matching worker, which has none) or set
pull_policy: build.
Happy to open a PR for either approach but the CI one is a little less accessible to me.
Describe the Bug
A fresh clone +
docker compose up -dproduces a stack where theapiservice never starts, while
worker,redis, andpuppeteer-servicecome upfine.
docker compose build && docker compose up -dworks.The cause is not the source.
docker compose uppulls the publishedtrieve/firecrawl:latestimage, which was built 2024-09-06 and no longerstarts.
To Reproduce
System
Logs
Why
docker-compose.yamlgives theapiservice both animage:and (via thex-common-serviceanchor) abuild::When a service declares both, Compose pulls the named image if it isn't already
local and only builds as a fallback. So
apiruns the registry artifact;worker— which has noimage:key — always builds from source. Hence onestarting and the other not, from the same Dockerfile.
The published image predates npm's registry signing-key rotation, so its
bundled corepack can't verify the pnpm download and exits before the app runs.
Evidence
Comparing the pulled image against a local build of the same Dockerfile:
trieve/firecrawl:latest(pulled)docker compose buildpackageManagerin/app/package.jsonpnpm@9.9.0pnpm@9.12.3apps/api/Dockerfilealready doesRUN npm install -g pnpm corepack@latest, soa current build picks up corepack with the rotated keys. The Dockerfile is
fine — the published image just predates it.
Workaround
Possible fixes
Depends on your intent for the published image:
trieve/firecrawl:latestis meant to be a supported artifact — itneeds rebuilding and republishing, and probably a CI job so it doesn't drift
again. Note
apps/api/DockerfileusesFROM node:20-slimunpinned, so theimage's Node version is whatever the tag resolved to at build time (20.17.0
here).
image:key onapiis atrap. Either drop it (matching
worker, which has none) or setpull_policy: build.Happy to open a PR for either approach but the CI one is a little less accessible to me.