Desplegar un contenedor Docker desde un Dockerfile
Lizard (lizard.build) aloja contenedores Docker que compila a partir de tu Dockerfile. Pon el archivo en la raíz del proyecto y ejecuta lizard up, o conecta un repositorio de GitHub: Lizard compila la imagen en sus propias máquinas, así que no necesitas Docker en local. Toma el puerto de EXPOSE o de --port, se lo pasa al contenedor en PORT y sirve el contenedor por HTTPS en un dominio onlizard.com. Lizard no descarga imágenes ya hechas de un registro; para ejecutar una imagen pública, escribe un Dockerfile de una línea que empiece por FROM con esa imagen.
Estado de las pruebas: esta página describe el sistema de compilación y el de despliegue de Lizard y Lizard CLI 4.0.42 tal como estaban el 2026-10-12; la comprobamos con su código fuente. No hicimos un despliegue nuevo para ella. La guía de Umami despliega de esta forma un Dockerfile de una línea con FROM y recoge su prueba.
Antes de empezar
- Un
Dockerfilecuya app escuche en0.0.0.0. Un servidor que escucha en127.0.0.1no acepta conexiones desde fuera del contenedor. - Lizard CLI, con la sesión iniciada mediante
lizard login, en Pro o en la prueba de Pro de 7 días (requiere tarjeta). Consulta los precios.
Si no tienes Dockerfile, prueba antes un despliegue sin él: lizardpack detecta Go, Node.js, Python, Ruby, PHP, Java, Rust y sitios estáticos. Consulta el proceso de compilación.
Un Dockerfile de ejemplo
Para un servidor Node.js como el de Desplegar una app Node.js:
FROM node:22-slim
WORKDIR /app
COPY package.json package-lock.json ./
RUN npm ci --omit=dev
COPY . .
ENV NODE_ENV=production
EXPOSE 3000
CMD ["node", "server.js"]Añade un .dockerignore para que los archivos locales no entren en la imagen:
node_modules
.git
.env*Desplegar con lizard up
lizard init --name my-container
lizard add --service web
lizard up --service weblizard up lee la primera línea EXPOSE del Dockerfile local, muestra Detected port 3000 from Dockerfile y fija ese puerto como puerto del servicio. Pasa --port <number> para elegir otro. Una subida siempre usa el Dockerfile de la raíz tal como está escrito. Consulta desplegar desde código local para saber qué incluye la subida.
Desplegar desde GitHub
lizard add -r your-org/your-app -n webCada push a la rama supervisada vuelve a compilar la imagen. Lizard usa el Dockerfile de la raíz salvo que este solo copie una salida compilada en otro sitio (COPY dist … sin ningún paso RUN con npm, pip, go build o similar); en ese caso, lizardpack escribe otro en su lugar. Para usar siempre el tuyo, configura dockerfilePath:
lizard service set web --set dockerfilePath=DockerfileConsulta Los cambios en el Dockerfile no se aplican y desplegar desde GitHub.
Un Dockerfile en un subdirectorio o con otro nombre
dockerfilePath es relativo al directorio de compilación, que fija rootDirectory. Para un servicio de un monorepo:
lizard service set api --set rootDirectory=apps/api --set dockerfilePath=Dockerfile.prodDeja vacíos buildCommand y startCommand en un servicio con Dockerfile. Sin dockerfilePath, cualquiera de los dos hace que Lizard escriba su propio Dockerfile a partir de los comandos en lugar de usar el tuyo. Con dockerfilePath configurado, un startCommand sigue reemplazando el ENTRYPOINT y el CMD de la imagen: Lizard ejecuta sh -c "<start command>".
A qué puerto envía Lizard el tráfico
Lizard elige el puerto del servicio en este orden:
- Un puerto que hayas fijado:
lizard up --port,lizard port, el panel o la líneaEXPOSEque leyólizard up. 0, que es el modo worker: sin puerto ni ruta.- Una variable
PORTque hayas fijado en el servicio. - El primer puerto que expone la imagen compilada, incluidos los puertos de su imagen base. Los puertos se ordenan como texto, así que
3000va antes que80. 3000.
Dentro del contenedor, PORT contiene el puerto elegido. Léelo o escucha en el mismo puerto fijo. Para cambiar el puerto más adelante, ejecuta lizard port 8080 --service web y luego lizard redeploy --service web. Consulta redes.
Qué llega a la compilación
- Argumentos de compilación: solo
COMMIT_SHA. DeclaraARG COMMIT_SHApara usarlo. Las demás líneasARGconservan su valor predeterminado o quedan vacías. - Variables: las variables y los secretos del servicio no llegan a la compilación de un Dockerfile, con una excepción para los valores
VITE_*yNEXT_PUBLIC_*que se explica en variables en tiempo de compilación. Escribe los valores públicos en el Dockerfile o haz commit de ellos; deja los secretos para el tiempo de ejecución. - Imágenes base: el sistema de compilación no tiene credenciales para tus registros, así que toda imagen de
FROMdebe ser pública. - Cambios que hace Lizard: antes de compilar, Lizard añade
ARG COMMIT_SHAantes delCOPYde tu código fuente y añade montajes de caché de BuildKit a los pasos de instalación denpm,yarn,pnpmybun. Los montajes de caché que escribas tú siguen funcionando, limitados a este servicio; una opción--mountescrita entre comillas hace fallar la compilación.
Sigue la compilación con lizard logs --build --service web.
En tiempo de ejecución
- Comprobación de estado: Lizard ignora
HEALTHCHECKy comprueba que el contenedor acepte conexiones TCP en el puerto del servicio. Consulta el servicio nunca pasa a healthy. - Usuario: se aplica el
USERde la imagen. Un usuario que no es root puede no tener permiso para abrir un puerto por debajo de 1024, así que en esas imágenes es mejor8080que80. - Variables: el contenedor recibe las variables de tu servicio,
PORTy las variables de plataformaLIZARD_*. Consulta variables y secretos. - Archivos: todo lo que escribe el contenedor se pierde en el siguiente despliegue. Usa Managed Postgres, Managed Object Storage u otro servicio para los datos; consulta almacenamiento y recuperación.
Ejecutar una imagen pública
Lizard compila cada servicio desde el código fuente, así que usa la imagen pública como base en un Dockerfile:
FROM ghcr.io/umami-software/umami:3.3.1
EXPOSE 3000Usa una etiqueta de versión en lugar de latest para elegir la versión que quieres desplegar. Ejecutar Umami y Ejecutar Flowise usan este patrón con Managed Postgres.
Problemas comunes
| Síntoma | Solución |
|---|---|
| Los cambios en tu Dockerfile no aparecen | En GitHub, Lizard puede considerar el archivo incompleto; configura dockerfilePath. Comprueba también que el servicio no tenga buildCommand ni startCommand. |
| El despliegue nunca pasa a healthy | La app escucha en otro puerto o en 127.0.0.1. Compara lizard port --service web con el log. |
pull access denied para la imagen base | La imagen es privada o el nombre está mal. Usa una imagen pública. |
Un valor de ARG está vacío | Lizard no pasa argumentos de compilación salvo COMMIT_SHA. Fija un valor predeterminado en el Dockerfile. |
| El servicio está en marcha, pero no sirve nada | Puede estar en modo worker: lizard port --service web muestra worker mode. |
Ver también
- Proceso de compilación
- Versiones de runtime
- Desplegar una app Rails
- Workers en segundo plano
lizard up
Actualizado