Troubleshooting
The failures users actually hit when creating or updating a container, with the exact message and the fix.
Each section starts with the message as the scripts print it, so you can search this page for what is on your screen. For the meaning of a single exit code see Exit codes.
First: read the error and find the log
A failing command produces one line of this form, followed by the output of that command:
in line 24: exit code 100 (APT: Package manager error (broken packages / dependency problems)): while executing command apt install -y build-essentialWhen the failure happened inside the container, the host adds
Installation failed in container <CTID> (exit code: <n>), the path of a combined
log, and a menu that asks what to do with the container. The menu and its options
are explained in
Container creation.
Where the logs are
| Log | Location | Contains |
|---|---|---|
| Build log | on the host, /tmp/create-lxc-<SESSION_ID>.log | storage, template, pct create, start, base packages |
pct create output | on the host, /tmp/pct_create_<CTID>_<timestamp>_<SESSION_ID>.log | what pct create printed |
| Install log | in the container, /root/.install-<SESSION_ID>.log | everything the install script ran, including output hidden in silent mode |
| Combined log | on the host, /tmp/<app>-<CTID>-<SESSION_ID>.log | build log and install log together; written when an install fails and printed as Installation log: |
| Update log | in the container, /tmp/create-lxc-<SESSION_ID>.log | output of an update run |
| Post-install hook | on the host, /var/log/community-scripts/post-install-<CTID>.log | output of a var_post_install script |
| Container start | on the host, journalctl -u pve-container@<CTID> | why a container did not start |
SESSION_ID is a random eight-character ID for the run. With dev_mode=logs the
host logs are written to /var/log/community-scripts/ instead of /tmp.
To read the install log of a container that still exists:
pct exec 105 -- sh -c 'tail -n 60 /root/.install-*.log'See more next time
Run the script again in verbose mode to see every command's output live. Choose
Advanced Install and answer the verbose question with yes, or:
var_verbose=yes bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/ct/gotify.sh)"dev_mode=keep keeps a failed container without asking, see
Dev mode.
DNS: "Git DNS"
✖️ Git DNS:github.com:( ✖️ )raw.githubusercontent.com:( ✖️ )api.github.com:( ✖️ )
✖️ Interrupted by user (SIGINT)
✖️ Installation failed in container 105 (exit code: 130)The install script checks at its start whether the container can resolve
github.com, raw.githubusercontent.com and api.github.com. If one of them
fails, the install stops right there. A name that resolves is shown with a check
mark instead. The following Interrupted by user (SIGINT) and exit code 130 are
how that stop is carried out; nobody pressed Ctrl-C.
The container has an address but its DNS server does not answer, or it answers without these names.
-
Check which DNS server the container uses:
pct exec <CTID> -- cat /etc/resolv.conf. Without a setting of its own a container uses the host's DNS configuration (node → System → DNS). -
Give the container a working DNS server. In
Advanced Installit is the DNS server step, on the command line:var_ns=1.1.1.1 bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/ct/gotify.sh)" -
A filtering resolver (Pi-hole, AdGuard Home) must not block the three names.
-
With Tailscale on the host, MagicDNS is a known cause. Disable it temporarily.
Related messages with the same cause:
| Message | Where | What happens |
|---|---|---|
APT repository DNS resolution failed in container, injecting public DNS servers | host, before the install | A warning. 8.8.8.8 and 1.1.1.1 are written to the container's /etc/resolv.conf and the install continues |
apt-get update failed and no Debian/Ubuntu host resolves - this is DNS, not the mirror | install script | Stops. Check /etc/resolv.conf in the container |
Network error: cannot resolve api.github.com | update | The update check stops |
curl: (6) Could not resolve host: raw.githubusercontent.com | host, as the very first output | The host itself has no working DNS; nothing was started |
When an install fails with a network error, the menu offers
Retry with DNS override in LXC (8.8.8.8 / 1.1.1.1). It rebuilds the container
and writes those two servers into it before the install.
No network
No address
No IP assigned to CT 105 after 60 attemptsExit code 118. The container started but got no IPv4 or IPv6 address on eth0
within about two minutes.
- DHCP: is a DHCP server reachable on the chosen bridge and VLAN? Test with another container or VM on the same bridge.
- Static address: check address, prefix and gateway. A gateway outside the
subnet is dropped with
Ignoring var_gateway '<gw>' because it is not in subnet of var_net '<net>'. - Bridge and VLAN: the default bridge is
vmbr0. Check that the bridge is connected to the network you expect and that a VLAN tag, if set, exists there. - Firewall: a Proxmox VE firewall rule that drops DHCP.
Network bridge 'vmbr1' does not exist on this nodeExit code 208, before anything is created. The message lists the bridges that do
exist. Pick one in Advanced Install or set var_brg.
Address but no internet
| Message | Meaning |
|---|---|
Network configured (IP: <ip>) but connectivity test failed - installation will continue | Host-side warning: no ping and no TCP connection to 1.1.1.1 worked |
No Network! repeated, then No Network After 10 Tries | Install script: the container has no address at all. Exit code 1 |
IPv4 Internet Not Connected | Install script: neither ping nor a TCP connection on port 443 worked |
No Internet detected and no terminal to ask - continuing anyway and Expect Issues Without Internet | The install goes on and will fail at the first download |
No IPv6 Internet (IPv4 is enough) | Information only |
Check the gateway of the container, the routing and NAT of your network, and
outgoing firewall rules. A container on an isolated or internal bridge has no
route out. If the host needs a proxy, set var_http_proxy; it is written into
the container before packages are installed.
Storage content types (exit codes 119 and 120)
No storage on this host is enabled for container templates (content 'vztmpl').No storage on this host is enabled for container disks (content 'rootdir').Exit code 120 for templates, 119 for disks. Every Proxmox VE storage has a list
of content types it accepts. A container needs one storage that accepts templates
and one that accepts container disks. On a default installation that is local
and local-lvm; the error appears when the content type was switched off or the
storage layout was changed.
When interactive, the script offers a dialog No storage for container templates
(or container disks) that lists the storages able to hold the content and
enables it on the one you choose, keeping what the storage already holds.
By hand, in the web interface: Datacenter → Storage → select the storage → Edit → Content. On the command line, list the current content first and then set the full list including the new type:
pvesm status
grep -A6 '^dir: local' /etc/pve/storage.cfg
pvesm set local --content backup,iso,vztmplpvesm set --content replaces the list, so repeat the types that are already
there. Templates need a file-based storage (dir, nfs, cifs, btrfs,
cephfs). Container disks can also be on lvm, lvmthin, zfspool or rbd.
Related messages:
| Message | Exit code | Fix |
|---|---|---|
Preselected storage '<name>' does not support content 'vztmpl' (or not found) | The storage saved in default.vars no longer fits. A new one is asked for, with an offer to correct the file | |
Storage '<name>' (<type>) does not support 'rootdir' content. | 213 | Enable the content type on that storage or choose another one |
Not enough space on '<name>'. Required: 8GB, Available: 3.2GB | 214 | Free space or choose another storage |
Thin pool <vg>/<pool> of storage '<name>' is full (data 71%, metadata 100%) | 214 | Usually the metadata volume: lvextend --poolmetadatasize +1G <vg>/<pool> |
Template download
Template download failed after 3 attempts: debian-13-standard_13.1-1_amd64.tar.zstExit code 222. The line after it names the cause the script could determine.
| Hint printed | Fix |
|---|---|
Free up space on storage '<name>', then retry. | The template storage is full |
Downloads go through the HTTP proxy set in Datacenter → Options; check that it is reachable. | Fix or remove the proxy setting |
This host cannot resolve download.proxmox.com: check its DNS servers (node → System → DNS). | Host DNS |
This host cannot reliably reach download.proxmox.com: check its gateway, firewall and connection. | Host network |
Try it by hand: pveam download <storage> <template> | None of the above matched. Run the command to see the full error |
To test by hand:
pveam update
pveam available -section system | grep debian-
pveam download local debian-13-standard_13.1-1_amd64.tar.zstRelated messages:
| Message | Exit code | Meaning |
|---|---|---|
Template catalog update timed out (possible network/DNS issue). Run 'pveam update' manually to diagnose. | pveam update did not finish within 30 seconds | |
No standard_ template found for debian 14 | 225 | The requested OS version is not in the catalog. Choose an existing version with var_version |
Proxmox offers no <os> template for <arch> | 225 | Neither Proxmox nor linuxcontainers.org has an image for this OS and architecture |
Could not reach the linuxcontainers.org image catalog | Warning. The fallback source was unreachable; the Proxmox catalog is tried | |
Template <name> not available in storage <storage> after download. | 223 | The download reported success but the file is not there. Check the storage |
Timeout while waiting for template lock after 10 attempts. | 211 | Another run holds /tmp/template.<template>.lock. If no other script is running, delete that file |
How templates are chosen, including the linuxcontainers.org fallback, is described in Container creation.
Unsupported Proxmox VE version
This version of Proxmox VE is not supported.
Supported: Proxmox VE version 8.0 – 8.9This version of Proxmox VE is not yet supported.
Supported: Proxmox VE version 9.0 – 9.2The container scripts run on Proxmox VE 8.0 to 8.9 and 9.0 to 9.2 and exit with code 1 on anything else. Proxmox VE 7 is too old: upgrade the host. A version newer than the range was released after the engine was last adjusted: look for an open issue in the ProxmoxVE repository.
A different message means the host is in the supported range but one package is behind:
pve-container <version> on this host cannot create Debian 13 containers.Exit code 231. The pve-container package is older than the OS release you want
to create. Update the host:
apt update && apt dist-upgradeIf apt finds nothing newer, the host has no working Proxmox VE package
repository. The post-pve-install tool can set
one up. To continue without updating, create the container with the older
release the message suggests, for example var_version=12.
Container creation failed due to broken Perl modules on the PVE host.Exit code 232. A partial upgrade left the Proxmox tools in a broken state. Run
apt update && apt dist-upgrade -y, reboot, and try again.
Out of memory during a build (exit codes 137, 134, 243)
exit code 137 (Killed (SIGKILL / Out of memory?))
exit code 134 (Process aborted (SIGABRT - possibly Node.js heap overflow))
exit code 243 (Node.js: Out of memory (JavaScript heap out of memory))A compiler or a JavaScript build needed more memory than the container has. Builds of Node.js, Rust and Go applications are the usual cases.
During an install the menu offers
Retry with more resources (RAM: 2048→4096 MiB, CPU: 2→4 cores)which rebuilds the container with doubled memory and cores. It can be chosen
twice; after that the menu shows OOM retry exhausted (already retried 2x). To
start with more memory right away:
var_ram=8192 var_cpu=4 bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/ct/fluid-calendar.sh)"You can lower the memory in the container's Resources tab once the install is done.
During an update the same build runs again in the existing container. Raise its memory on the host, then update:
pct set 105 -memory 4096
pct exec 105 -- updateIf the container has less memory or fewer cores than the script declares, the update warns before it starts:
Required: 2 CPU, 4096MB RAM | Current: 1 CPU, 1024MB RAMTake that warning seriously for applications that compile on update.
For Node.js builds the error handler also prints
Possible Node.js heap OOM. Try: export NODE_OPTIONS="--max-old-space-size=3072" and rerun the build.The number is 75 % of the container's memory, between 1024 and 12288. This helps when the container has enough memory but Node's own heap limit is lower.
Exit code 137 is also what you see when the host itself ran out of memory and
its kernel killed the process. Check dmesg | grep -i oom on the host.
GitHub rate limit
GitHub API rate limit, waiting 2s... (attempt 1/3)
GitHub API rate limit exceeded (HTTP 403).
To increase the limit, export a GitHub token before running the script:
export GITHUB_TOKEN="ghp_your_token_here"GitHub allows a limited number of unauthenticated API requests per hour per IP address. Several installs or updates in a row, or a shared address (carrier-grade NAT, VPN), use it up.
In many cases the scripts work around the limit on their own and only warn:
GitHub API rate limit reached; read the release from github.com instead. A token avoids this: var_github_tokenOtherwise:
-
Wait an hour, or
-
use a token. Create one at
https://github.com/settings/tokens; it needs no permissions beyond reading public repositories. Then either answer the promptWould you like to enter a GitHub Personal Access Token (PAT)? [y/N]:with yes, or pass it in:var_github_token=ghp_xxxxxxxx bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/ct/gotify.sh)"For updates inside a container:
var_github_token=ghp_xxxxxxxx update.To set it once for all installs, put
var_github_token=ghp_xxxxxxxxinto/usr/local/community-scripts/default.vars. That file is only read in theUser Defaultsmode. See Defaults.
GitHub API authentication failed (HTTP 401). together with
Your GITHUB_TOKEN appears to be invalid or expired. means the token itself is
the problem.
Cluster filesystem and quorum
The Proxmox cluster filesystem is not mounted at /etc/pve (pve-cluster: failed).Exit code 228. Every pct, qm and pvesm command needs /etc/pve, which the
pve-cluster service provides. This also applies to a single node without a
cluster. When interactive, the script offers to restart the service. By hand:
systemctl restart pve-cluster
journalctl -u pve-cluster -n 50/etc/pve is mounted, but /etc/pve/storage.cfg is missing.Exit code 228. The cluster configuration is damaged. Check pvecm status and the
journal of pve-cluster.
This cluster node has no quorum, so /etc/pve is read-only and nothing can be created.or, later in the run, Cluster is not quorate. Start all nodes or configure quorum device (QDevice).
Exit code 210. In a cluster, a node may only change configuration while it sees a
majority of the nodes. Bring the other nodes back online and check:
pvecm statusA two-node cluster loses quorum as soon as one node is off; that is what a QDevice is for.
Container ID 105 not listed in 'pct list' after 10s.Exit code 215. The container was created but the cluster filesystem had not
caught up. Check with pct list a moment later; the container usually exists.
The console was closed during an install
Closing the browser tab, losing the SSH connection or closing a laptop lid does not abort an install. The install keeps running inside the container, and the host process keeps waiting for it, with its output going to the build log instead of the terminal. Verbose runs say so up front:
Closing this console does not abort the install; it finishes on its own (Ctrl-C does abort).
Follow it with: pct exec 105 -- tail -f /root/.install-1a2b3c4d.logTo see how it went, open a new shell on the host:
pct exec 105 -- sh -c 'tail -n 30 /root/.install-*.log'
grep -h 'terminal closed' -A20 /tmp/create-lxc-*.logThe build log contains
The terminal closed; continuing, output follows here. from the moment of the
disconnect. Possible endings:
| Ending | Meaning |
|---|---|
The install finished | Success. The container notes are written as usual |
The install reported a failure | The install script failed. Nobody could answer the remove-or-keep question, so the container is kept. Read its install log |
Exit code 199, Engine: exit code not reported | The install process ended, or the container stopped by itself, without leaving a result. Read the install log and journalctl -u pve-container@<CTID> |
Exit code 143, The install did not fail: <task> by <user> ended it | Someone stopped, rebooted or removed the container while it was installing |
Exit code 124, Gave up waiting after 21600s | The install did not finish within six hours |
If you are not sure whether a container from such a run is complete, look for
the last lines of its install log. A finished install ends with the cleanup step
(Cleaned). When in doubt, remove the container and run the script again.
Ctrl-C is not the same as closing the console: it stops the container and ends the run with exit code 130.
Updates
| Message | Meaning and fix |
|---|---|
No update available: <app> (<version>) | Not an error. The installed version is the latest release |
This script is currently disabled in community-scripts. | The maintainers paused the script, usually because of an upstream problem. The reason is printed. Wait, or see Updates |
<name>: this script has been removed from community-scripts. | The script no longer exists. The container keeps working but gets no more updates |
Update service unreachable — continuing with a normal update. | Information only |
No update script found for '<name>' | The container's script name does not exist in the repository it was built from. See Updates |
Warning: Storage is dangerously low (<n>%). | The container's root disk is more than 80 % full. Grow it on the host: pct resize <CTID> rootfs +4G |
Required: ... | Current: ... | The container has less memory or fewer cores than the script expects. See the out-of-memory section above |
<tool> is recorded for this container but missing - reinstalling | Information only. A toolchain the app needs was removed and is put back |
exit code 127, <tool> is not installed or not on PATH | A command the update needs is missing. The line after it says which helper provides it |
Still stuck
- Look up the exit code in Exit codes.
- Search the issues of the ProxmoxVE repository for the application name; a broken upstream release usually has one already.
- When you open an issue, include the full error output, the Proxmox VE version
(
pveversion), whether you used default or advanced settings, and the relevant part of the combined log. Check the log for passwords and tokens before posting it.