Deploy failed
A deploy that fails almost always says why. This page shows where to read it and what the common messages mean.
Where to look
The message itself. Most refusals appear straight away as a message in the deploy dialog or as a notification.
The log panel. While a deploy runs, its log streams at the bottom of the screen. The last lines before it stops are usually the cause.
The Deployments tab. Open the lab and go to Deployments. Each recent attempt shows its status, when it started, how long it took, the exit code, who triggered it and, if it failed, the error text.

The Activity tab. Shows what happened to the lab around the deploy — for example that it was stopped by a limit, or crashed after starting. See Lab stopped unexpectedly.
Common errors
| Message | What it means | Fix |
|---|---|---|
| You can only deploy N labs at a time. Please stop a lab to deploy a new one. | You are at your running-labs limit | Stop or pause another lab. See Plans and limits. |
| Your organization can run N labs at a time on its plan… | Same, for an organization | Stop one of the organization's labs |
| Copy limit reached (N of M)… | You have as many copies as your plan allows. Stopped copies count too. | Terminate a copy you no longer need — only that frees a slot |
| Copy deployments are not available on your plan for this lab. | This lab's template does not allow copies on your plan | Use the main lab, or upgrade |
| Domain '…' is already attached to your running instance '…'. | A domain can be served by one lab at a time | Remove it from that lab, or stop that lab, then deploy |
| …is not registered on this platform. Add it under Domains first. | A domain in the lab's settings is not on your account | Add it on My Domains, or remove it from the lab's Preferences |
| No DNS entries to take you public. Please add Domains to continue. | You chose Public without any domain | Add a domain first |
| A storage migration is in progress for this account — deploys resume when it completes. | Your storage is being moved | Wait for it to finish |
| Build required — Build this template first | The template has never been built successfully | Build it, or ask its author to |
| This template is not published for deployment yet (still in alpha/draft) | The author has not released it to others | Wait, or ask the author |
| Deploying templates requires a paid plan | Templates made by other users need a paid plan to deploy | See Plans and limits |
| This lab was paused by the platform (subscription). Renew your plan to resume it. | Your subscription lapsed | Renew your plan |
| Port N is reserved or invalid for custom proxies. | An HTTP proxy uses a port the lab already needs | Pick another port — see Publishing ports |
The deploy failed, but the lab is running
The Deployments tab flags this case in amber:
The deploy command failed but a container is running — this lab may be incompletely configured (for example with no VPN address). A redeploy is safest.
It means the machine started, but a later setup step did not finish. The lab may look normal while missing something — most often its private address, so SSH and the tunnel do not reach it even though the browser editor works.
Redeploy it. A clean redeploy runs every step again.
The deploy succeeded, but something is missing
| Symptom | Cause |
|---|---|
| A package you installed is gone | Everything outside your home directory is rebuilt on each deploy. Use a startup script. |
| New domain or port not live | Domain and port settings apply on redeploy — use Apply & Redeploy now |
| New SSH key not accepted | Keys are installed at deploy time. Redeploy after adding one. |
| The lab stops soon after starting | Your startup script may be failing, or the app is running out of memory. Test the script with Run now and check Activity. |
Do it with an AI assistant
You can also do this by asking an AI assistant connected to your account — see Connect an AI assistant to set one up.
| Ask | What the assistant does |
|---|---|
| “My lab failed to deploy — what went wrong?” | lab_status, then lab_logs |
| “Is my startup script the problem?” | Reads it with lab_startup_script and matches it against lab_logs |
| “Deploy it again and watch it” | deploy_lab, then wait_for_deploy |
| “It says deployed but my app is not up” | lab_probe, then list_lab_processes and lab_process_logs |
Most failures repeat until their cause is fixed. If the assistant is told a deploy of that lab is already running, it should wait, not try again.
Next
- Lab settings — startup script and passwords
- Lab stopped unexpectedly
- Cannot connect