Uso
Construí una app hacia un registry o un tar, revisá el plan antes, pasá variables, conservá las cachés entre builders y leé la salida.
Esta página cubre las tareas comunes. Todos los flags y valores por defecto están en la referencia de la CLI. build necesita root; plan no.
Construir y subir a un registry
acropolis build ./my-app -t registry.example.com/team/my-app:latest
El directorio por defecto es .. Cuando termina el build, Acropolis imprime la referencia y el digest del manifest en stdout (registry.example.com/team/my-app:latest@sha256:...).
Credenciales del registry
Acropolis lee las credenciales de dos lugares:
- Las entradas
authsde la config de Docker:$DOCKER_CONFIG/config.json, o~/.docker/config.jsoncuandoDOCKER_CONFIGno está definida. Solo se usan las entradas con un valorauth(base64 deuser:password); no se llama a los credential helpers. ACROPOLIS_REGISTRY,ACROPOLIS_REGISTRY_USERyACROPOLIS_REGISTRY_PASSWORDen el entorno del procesoacropolis, para un único host de registry.
Las credenciales se mandan solo al host al que pertenecen, y los pasos del build no pueden leerlas. Mirá Seguridad para agentes.
Construir a un tar
Sin un registry, escribí un tar con layout de imagen OCI y cargalo:
acropolis build ./my-app --oci image.tar --info info.json
docker load -i image.tar
docker load, skopeo y regctl image import aceptan el tar. Sin -t, Acropolis imprime solo el digest del manifest en stdout. Las imágenes se construyen para la plataforma del host: construí en arm64 para obtener una imagen arm64.
Revisá el plan antes
acropolis plan imprime lo que haría build, sin construir y sin root: el provider detectado, los toolchains, los pasos y la base del runtime.
acropolis plan ./my-app
acropolis plan ./my-app --json
plan no tiene --config: si build usa --config FILE, pasale -e ACROPOLIS_CONFIG_FILE=FILE a plan. Si el plan está mal, guiá la detección con un archivo de configuración o con variables: mirá Configuración.
Pasar variables de la app
acropolis build ./my-app --oci image.tar -e NODE_ENV=production -e API_URL=https://api.example.com
Las variables comunes de la app (nombres sin el prefijo ACROPOLIS_ o RAILPACK_) llegan a los pasos del build, pero el plan solo lleva referencias {env:NAME} a ellas y la config de la imagen no las recibe. Definí las variables de runtime en el contenedor que corre la imagen. Los ajustes del build como -e ACROPOLIS_START_CMD=... son distintos: sus valores van al plan y pueden llegar a la config de la imagen, así que nunca pongas secretos en ellos. Mirá Configuración. plan acepta los mismos flags -e.
Leer el resultado
- stdout recibe el resultado: la referencia y el digest de la imagen después de
build(no se imprimen con--events json, donde los trae el eventobuild_finished), y el plan después deplan. - stderr recibe los eventos de progreso.
--events human(por defecto) imprime líneas legibles,--events jsonimprime un objeto JSON por línea y--events quietno imprime nada. --info FILEescribe un resumen en JSON, también cuando el build falla, consuccess,errorClassyexitCode.- El código de salida te dice qué hacer después:
1falló el build de la app,75infraestructura (reintentá una vez),78la app no se puede construir tal como está configurada,70un bug de Acropolis.
El contrato completo está en la referencia de la CLI: eventos, info.json y códigos de salida.
Conservar las cachés entre builders efímeros
Los builds de Go y Cargo, node_modules, .next/cache y el resto viven en una caché por app dentro del home. En una máquina que arranca vacía, llevala como archivo:
export ACROPOLIS_CACHE_KEY=my-app
acropolis cache import cache.tar.zst || true
acropolis build ./my-app -t registry.example.com/team/my-app:latest
acropolis cache export cache.tar.zst
--key toma por defecto ACROPOLIS_CACHE_KEY. Usá la misma clave en el build, definida en el entorno del proceso acropolis (con -e se ignora): sin ACROPOLIS_CACHE_KEY el build usa un hash de la ruta de la app, así que la caché exportada no coincidiría. Las claves se sanitizan para convertirlas en nombres de directorio (los caracteres que no son letras, dígitos, - ni _ pasan a ser _, así que team/app y team_app son la misma caché): mantené las claves únicas después de eso. Corré import, build y export con el mismo home: el mismo --home o ACROPOLIS_HOME, o el mismo usuario. Si importás con tu usuario y construís con sudo, usás dos homes distintos. Si el archivo de caché falta o está roto, cache import falla con un código de salida distinto de cero; ignorá ese error (|| true) y construí igual: el build funciona sin la caché.
Precalentar toolchains
Descargá los toolchains en el home de antemano, como hace la imagen del builder:
acropolis prewarm --tools node:lts,go:latest,bun:latest,uv:latest,python:3.13
Sin --tools, la lista es node:lts,node:22,node:24,go:latest,bun:latest,uv:latest.
Mantener el home chico
acropolis gc --max-size 20G
Las entradas que usan los builds en curso se conservan; mientras corren builds, solo se borran las entradas inactivas hace más de una hora. ACROPOLIS_CACHE_MAX=20G recorta el home de la misma forma después de cada build.
Mirrors y registries privados
acropolis --mirror docker.io=mirror.example.com build ./my-app --oci image.tar
--mirror (o ACROPOLIS_MIRRORS) acepta pares REGISTRY=MIRROR, repetidos o separados por comas. Si no se puede llegar a Docker Hub, Acropolis pasa a mirror.gcr.io por su cuenta; cada manifest y cada blob se siguen verificando por digest.
Acropolis rechaza http:// y los hosts privados para lo que descarga por su cuenta. Definí ACROPOLIS_ALLOW_PRIVATE_REGISTRY=1 en su entorno para permitirlos.
Runtimes y hosts más viejos
--compression gzippara runtimes anteriores a Docker 23 o containerd 1.5. Las capas son zstd por defecto.--hermetic offcuando el host no puede crear network namespaces. En ese caso los pasos del host corren como procesos comunes del host, sin nada del aislamiento de los pasos, así que usalo solo con código en el que confiás. Los pasos dentro del rootfs de una imagen oficial conservan sus namespaces y su filtro seccomp. Los pasos que el plan marca como offline, como los pasos de build de Go y Rust, no pueden correr con--hermetic offy fallan.--keep-workconserva el directorio de trabajo después del build, para depurar.