Развёртывание Docker-контейнера из Dockerfile
Lizard (lizard.build) запускает Docker-контейнеры, которые собирает из вашего Dockerfile. Положите файл в корень проекта и выполните lizard up или подключите репозиторий GitHub: Lizard соберёт образ на своих сборочных машинах, так что локальный Docker не нужен. Lizard берёт порт из EXPOSE или --port, передаёт его в контейнер в переменной PORT и отдаёт контейнер по HTTPS на домене onlizard.com. Готовые образы из registry Lizard не скачивает; чтобы запустить публичный образ, напишите Dockerfile из одной строки FROM с этим образом.
Статус тестов: страница описывает сборщик, деплойер и CLI 4.0.42 Lizard по состоянию на 2026-10-12 и сверена с их исходным кодом. Нового деплоя для неё мы не запускали. Руководство по Umami так же развёртывает Dockerfile из одной строки FROM и описывает свой тест.
Перед началом
Dockerfileс приложением, которое слушает0.0.0.0. Сервер, привязанный к127.0.0.1, не принимает подключений извне контейнера.- Lizard CLI, в который вы вошли через
lizard login, на тарифе Pro или в 7-дневном пробном периоде Pro (нужна карта). См. цены.
Если Dockerfile нет, сначала попробуйте деплой без него: lizardpack распознаёт Go, Node.js, Python, Ruby, PHP, Java, Rust и статические сайты. См. конвейер сборки.
Пример Dockerfile
Для сервера на Node.js, например из руководства Развёртывание приложения 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"]Добавьте .dockerignore, чтобы локальные файлы не попали в образ:
node_modules
.git
.env*Деплой через lizard up
lizard init --name my-container
lizard add --service web
lizard up --service weblizard up читает первую строку EXPOSE в локальном Dockerfile, выводит Detected port 3000 from Dockerfile и назначает этот порт портом сервиса. Чтобы выбрать другой, передайте --port <number>. Загрузка всегда использует корневой Dockerfile как есть. Что входит в загрузку, см. в разделе развёртывание из локального кода.
Деплой из GitHub
lizard add -r your-org/your-app -n webКаждый push в отслеживаемую ветку пересобирает образ. Lizard берёт корневой Dockerfile, если только тот не копирует результат, собранный где-то ещё (COPY dist … без шага RUN с npm, pip, go build и подобным); тогда lizardpack пишет замену. Чтобы всегда использовался ваш файл, задайте dockerfilePath:
lizard service set web --set dockerfilePath=DockerfileСм. изменения в Dockerfile не применяются и развёртывание из GitHub.
Dockerfile в подкаталоге или с другим именем
dockerfilePath задаётся относительно каталога сборки, который определяет rootDirectory. Для сервиса в монорепозитории:
lizard service set api --set rootDirectory=apps/api --set dockerfilePath=Dockerfile.prodОставьте buildCommand и startCommand пустыми у сервиса с Dockerfile. Без dockerfilePath любая из этих команд заставляет Lizard написать собственный Dockerfile из команд вместо вашего. Если dockerfilePath задан, startCommand всё равно заменяет ENTRYPOINT и CMD образа: Lizard запускает sh -c "<start command>".
На какой порт Lizard направляет трафик
Lizard выбирает порт сервиса в таком порядке:
- Порт, который вы задали:
lizard up --port,lizard port, панель управления или строкаEXPOSE, которую прочиталlizard up. 0включает режим воркера: ни порта, ни маршрута.- Переменная
PORT, которую вы задали у сервиса. - Первый порт, который открывает собранный образ, включая порты из базового образа. Порты сортируются как текст, поэтому
3000идёт раньше80. 3000.
Внутри контейнера в PORT лежит выбранный порт. Читайте его или слушайте тот же фиксированный порт. Чтобы позже сменить порт, выполните lizard port 8080 --service web, затем lizard redeploy --service web. См. сеть.
Что попадает в сборку
- Аргументы сборки: только
COMMIT_SHA. Чтобы его использовать, объявитеARG COMMIT_SHA. Остальные строкиARGсохраняют значение по умолчанию или остаются пустыми. - Переменные: переменные и секреты сервиса не попадают в сборку по Dockerfile; исключение составляют значения
VITE_*иNEXT_PUBLIC_*, описанные в разделе переменные во время сборки. Публичные значения впишите в Dockerfile или закоммитьте; секреты оставьте для времени выполнения. - Базовые образы: у сборщика нет входа в ваши registry, поэтому каждый образ во
FROMдолжен быть публичным. - Что меняет Lizard: перед сборкой Lizard добавляет
ARG COMMIT_SHAпередCOPYс исходниками и добавляет кэш-монтирования BuildKit к шагам установкиnpm,yarn,pnpmиbun. Кэш-монтирования, которые вы написали сами, продолжают работать в пределах этого сервиса; опция--mount, записанная в кавычках, ломает сборку.
Следите за сборкой командой lizard logs --build --service web.
Во время выполнения
- Проверка здоровья: Lizard игнорирует
HEALTHCHECKи проверяет, что контейнер принимает TCP-подключения на порту сервиса. См. сервис никогда не становится healthy. - Пользователь: действует
USERиз образа. У пользователя без root может не быть прав открыть порт ниже 1024, поэтому для таких образов берите8080, а не80. - Переменные: контейнер получает переменные сервиса,
PORTи платформенные переменныеLIZARD_*. См. переменные и секреты. - Файлы: всё, что контейнер записал, пропадает при следующем деплое. Для данных используйте Managed Postgres, Managed Object Storage или другой сервис; см. хранилище и восстановление.
Запуск публичного образа
Lizard собирает каждый сервис из исходников, поэтому оберните публичный образ в Dockerfile:
FROM ghcr.io/umami-software/umami:3.3.1
EXPOSE 3000Используйте тег версии вместо latest, чтобы выбрать нужный релиз. Так сделано в руководствах Запуск Umami и Запуск Flowise, где образ работает вместе с Managed Postgres.
Частые проблемы
| Симптом | Решение |
|---|---|
| Правки в Dockerfile не применяются | На GitHub Lizard может счесть файл неполным; задайте dockerfilePath. Также проверьте, что у сервиса нет buildCommand или startCommand. |
| Деплой так и не становится healthy | Приложение слушает другой порт или 127.0.0.1. Сравните lizard port --service web с логом. |
pull access denied для базового образа | Образ приватный или имя указано неверно. Используйте публичный образ. |
Значение ARG пустое | Lizard не передаёт аргументы сборки, кроме COMMIT_SHA. Задайте значение по умолчанию в Dockerfile. |
| Сервис работает, но ничего не отдаёт | Возможно, он в режиме воркера: lizard port --service web выводит worker mode. |
См. также
Обновлено