Skip to main content
A custom image is a sandbox disk with your tools already installed. You build it once; every sandbox made from it starts with that state. How builds work: Images.
<image> is a name or an img_ id. Names match ^[a-z0-9][a-z0-9._-]{0,62}$.

Build

Give either a Dockerfile (-f) or setup flags (--run and friends), not both. With FROM zode/base or FROM ubuntu:24.04, each Dockerfile line runs in a VM. Any other FROM is built with docker build inside the VM. In a FROM zode/base build, RUN, ENV, ARG, WORKDIR and USER shape the build, CMD or ENTRYPOINT becomes the start command, and HEALTHCHECK the ready check. COPY and ADD fail because there is no build context yet; fetch files with RUN curl or git clone. Instructions that do nothing in a sandbox, such as EXPOSE or LABEL, are skipped with a note: line.
The CLI follows the build log until it ends:
Any note: lines about skipped instructions come first. A failed build exits 1 with zode: app-dev failed: <reason>. The same image with setup flags:

List

STATUS is building, ready or failed. FROM says whether the image came from a Dockerfile or setup flags. With no images it prints no images yet: zode image build <name> -f Dockerfile.

Logs

If part of a very long log was dropped before the CLI read it, the output marks the gap with [N bytes of log not kept].

Delete

This cancels a build that is still running, or deletes a finished image.

Make a sandbox from an image

The image fixes the size, so --size with --image fails with an image has its own size; drop --size. Only a ready image can be used.

Plan limits

Over the limit, zode image build fails with a message such as the free plan keeps 3 images; delete one first.