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. When a deploy is refused, a message usually appears straight away 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 usually show the cause. When the deploy reports an error, an Error dialog also opens with the reason, and the log ends with Deploy finished with status: and the result.
Deploy attempts. Open the lab and go to Activity. The Deploy attempts card lists the last 15 deploys: status, when it started, how long it took, the exit code, who triggered it and, if it failed, the error text.
The Activity timeline. The card above the deploy attempts 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 another lab — a paused lab still counts. 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, copies of every lab count together, and so do labs deployed from user-made templates. | Terminate a copy you no longer need — only that frees a slot. See Slots and limits. |
| 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 |
| Port N is listed more than once in your proxies. | Two HTTP proxy rows use the same port | Merge them into one row with several domains |
| Domain '…' cannot be used multiple times. It's already selected for … | The same domain is picked for two things on this lab — port 80, the browser editor, or a proxy | Give each its own domain |
| Domain '…' is not available to you. | The domain belongs to someone else, or to an organization you are not acting for | Use one of your own domains |
| A deploy is already in progress for this lab — please wait for it to finish. | You, or someone you shared it with, already started a deploy | Wait for it, and watch its log |
| Deploy could not be started. Please try again. | The platform could not start the deploy | Try again in a minute. If it repeats, tell your administrator. |
| This template has not been built yet and cannot be deployed. | The template behind this lab has no successful build | Build it, or ask its author to |
| You do not have access to deploy this template. | The template is not shared with you | Ask its author to share it |
| This template needs VPN … but its WireGuard probe failed at build time / …enables code-server but the build probe could not find it in the image | The template's image is missing something its settings rely on | The template's author must fix and rebuild it |
| Invalid run-as user: lowercase letters, digits, - and _ only (max 32 chars, not root). | The Run as user you typed for a copy is not a valid login name | Use a lowercase name, up to 32 characters, not root |
| Scale group must be lowercase letters, digits and dashes (max 32). | The scale group name has other characters | Rename it |
| The … password cannot contain '=' characters. / …is too long (max 128 characters). | A password on Preferences breaks a rule | Change it — see Passwords |
| At most 4 WG networks per lab. / Network '…' is not available to you. | Too many private networks are selected, or one belongs to someone else | Select fewer, or only your own |
| You can only deploy 3 labs at a time in team mode. | Your clan is already running as many team labs as it can | A clan member must stop one |
| Challenge labs are not available on this platform. | Your platform has the scoring features turned off | Nothing to fix — use machine labs |
| This event has ended…, Event has not started yet…, You have not registered for the event… | The lab belongs to an event | See Events |
The deploy failed, but the lab is running
The Deploy attempts card on the Activity 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
- Deploy and redeploy — what a deploy does, step by step
- Lab settings — startup script and passwords
- Lab stopped unexpectedly
- Cannot connect