#2026.5.16-beta.6 iis with apt
1 messages · Page 1 of 1 (latest)
I checked v2026.5.16-beta.6: OPENCLAW_DOCKER_APT_PACKAGES still exists, but it is a Docker build arg, not a runtime env var. So it only takes effect when the image is rebuilt.
Two common ways it looks “ignored”:
- You set it in
.envafter the image was already built, then only diddocker compose up. - You’re using
OPENCLAW_IMAGEto pull a prebuilt image. In that path the setup script pulls the image and does not build, so apt packages cannot be baked in.
Try rebuilding explicitly:
export OPENCLAW_DOCKER_APT_PACKAGES="your packages here"
export OPENCLAW_IMAGE=openclaw:local
./scripts/docker/setup.sh
or, if you’re driving Compose yourself:
docker compose build --no-cache --build-arg 'OPENCLAW_DOCKER_APT_PACKAGES=your packages here' openclaw-gateway
docker compose up -d
Docs reference: https://docs.openclaw.ai/install/docker and FAQ Docker note: https://docs.openclaw.ai/help/faq
If that still doesn’t install, paste the exact command you’re using plus the build log line around OPENCLAW_DOCKER_APT_PACKAGES; that should show whether the build arg is empty or the package install step is failing.
i have it set in my .env, that would work?
Short version: only if it is in the shell environment at build time. Just having it written in .env is probably the trap.
I checked the beta.6 setup script: it writes/updates .env, but it does not generally source existing values from .env before building. So this can get ignored or even rewritten empty if you run setup with only the file edited.
Use:
export OPENCLAW_IMAGE=openclaw:local
export OPENCLAW_DOCKER_APT_PACKAGES="ffmpeg curl jq"
./scripts/docker/setup.sh
If you are using raw Compose, pass it as a build arg explicitly:
docker compose build --build-arg 'OPENCLAW_DOCKER_APT_PACKAGES=ffmpeg curl jq' openclaw-gateway
docker compose up -d
Runtime .env values won’t install apt packages into an already-built image; apt packages have to be baked during docker build.
i pulled and checked out the new beta 6, and rebuilt the container.
Got it. The key thing is how it was rebuilt: checking out beta 6 + rebuilding is not enough unless the build received the arg.
Please check the build output for this line/step:
--build-arg OPENCLAW_DOCKER_APT_PACKAGES=...
If it’s missing or empty, the apt step will be skipped even though .env contains it.
Two quick checks:
grep OPENCLAW_DOCKER_APT_PACKAGES .env
docker compose config | grep -n OPENCLAW_DOCKER_APT_PACKAGES
But the real proof is the build command/log. For a guaranteed rebuild:
export OPENCLAW_IMAGE=openclaw:local
export OPENCLAW_DOCKER_APT_PACKAGES="your packages here"
docker compose build --no-cache --build-arg "OPENCLAW_DOCKER_APT_PACKAGES=$OPENCLAW_DOCKER_APT_PACKAGES" openclaw-gateway
docker compose up -d
Then verify inside the container, for example:
docker compose exec openclaw-gateway dpkg -l | grep 'package-name'
My suspicion: the rebuild happened, but Compose did not pass the .env value into Dockerfile ARG.
how can i check the build log?
Docker doesn’t keep a nice persistent “build log” like container logs. Easiest way is to rerun the build and save the output:
export OPENCLAW_DOCKER_APT_PACKAGES="your packages here"
docker compose build --no-cache --progress=plain --build-arg "OPENCLAW_DOCKER_APT_PACKAGES=$OPENCLAW_DOCKER_APT_PACKAGES" openclaw-gateway 2>&1 | tee openclaw-build.log
Then search it:
grep -n "OPENCLAW_DOCKER_APT_PACKAGES\|apt-get install" openclaw-build.log
If you’re using the setup script instead:
export OPENCLAW_IMAGE=openclaw:local
export OPENCLAW_DOCKER_APT_PACKAGES="your packages here"
./scripts/docker/setup.sh 2>&1 | tee openclaw-setup.log
grep -n "OPENCLAW_DOCKER_APT_PACKAGES\|apt-get install" openclaw-setup.log
--progress=plain is the useful bit; otherwise BuildKit’s output can hide the actual step details.
that breaks the intereactive setup, so i cant select anyoptions to get though the setup
Yep, piping through tee can break interactive prompts. For the interactive setup, don’t pipe it.
Run it normally with the env vars exported first:
export OPENCLAW_IMAGE=openclaw:local
export OPENCLAW_DOCKER_APT_PACKAGES="your packages here"
./scripts/docker/setup.sh
If you need to capture the interactive session, use script instead of tee:
export OPENCLAW_IMAGE=openclaw:local
export OPENCLAW_DOCKER_APT_PACKAGES="your packages here"
script -q -c './scripts/docker/setup.sh' openclaw-setup.log
Or split it into two steps: build first with logs, then run setup interactively:
export OPENCLAW_DOCKER_APT_PACKAGES="your packages here"
docker compose build --no-cache --progress=plain --build-arg "OPENCLAW_DOCKER_APT_PACKAGES=$OPENCLAW_DOCKER_APT_PACKAGES" openclaw-gateway 2>&1 | tee openclaw-build.log
export OPENCLAW_IMAGE=openclaw:local
./scripts/docker/setup.sh
That avoids breaking the prompt while still proving whether the apt packages were baked into the image.