Proxmox VE allows you to pull Open Container Initiative (OCI) images directly from container registries like Docker Hub or GitHub Container Registry (GHCR) and convert them into lightweight LXC containers. This avoids the overhead of running a full Docker daemon or Virtual Machine.
Method 1: Using the Proxmox Web GUI
Step 1: Download/Pull the Image Template
- Open your Proxmox Web UI (
https://<your-proxmox-ip>:8006). - In the left-hand navigation tree, click on your target storage location (typically
localorlocal-zfs). - Click on CT Templates from the sub-menu.
- Click the Pull from OCI Registry button at the top.
- In the pop-up window:
- Registry: Choose or enter
docker.io(for Docker Hub) orghcr.io(for GitHub Container Registry). - Image Reference: Enter the image path and tag.
- Example 1 (Docker Hub Official):
docker.io/library/nginx:alpine - Example 2 (Docker Hub User):
docker.io/louislam/uptime-kuma:latest - Example 3 (GitHub Registry):
ghcr.io/home-assistant/home-assistant:stable
- Example 1 (Docker Hub Official):
- Click Pull. Proxmox will download the layer blobs and convert them into an LXC container template.
Step 2: Create the Container
- Click the Create CT button in the upper-right toolbar.
- General Tab:
- Enter a CT ID (e.g.,
105). - Enter a Hostname (e.g.,
uptime-kuma). - Enter a Password or upload an SSH key.
- Ensure Unprivileged container is checked for maximum security.
- Template Tab:
- Storage: Select where you downloaded the template (e.g.,
local). - Template: Select the OCI template you pulled in Step 1.
- Disks / CPU / Memory Tabs:
- Allocate disk size, CPU cores, and RAM according to your application’s requirements.
- Network Tab:
- Bridge:
vmbr0 - IPv4: Set to
DHCPor assign a static IP address (e.g.,192.168.1.50/24). - Note: Unlike standard Docker, LXCs get their own IP address on your local network. No
-p port:portmapping is needed!
- Confirm Tab:
- Review your settings and click Finish. Do not start it immediately if environment variables are needed.
Step 3: Configure Environment Variables (Optional)
If your container requires environment variables (like standard Docker -e flags):
- Select the newly created container from the left sidebar.
- Go to Options → Environment.
- Edit the settings to add key-value pairs (e.g.,
TZ=America/New_York,PUID=1000).
Step 4: Start the Container
- Click Start in the upper-right corner.
- Open the Console tab to monitor the boot sequence.
Method 2: Using the Proxmox CLI (pct / pveam)
You can execute the entire pull and deployment process directly via SSH or the Proxmox Host Node Shell.
1. Pull the Image via pveam
# Syntax: pveam pull <storage> oci:<registry>/<repository>:<tag>
# Example 1: Pull Nginx from Docker Hub
pveam pull local oci:docker.io/library/nginx:alpine
# Example 2: Pull Uptime Kuma from Docker Hub
pveam pull local oci:docker.io/louislam/uptime-kuma:latest
2. Create the LXC Container via pct
# Syntax: pct create <vmid> <storage>:vztmpl/<image-filename> [options]
pct create 105 local:vztmpl/uptime-kuma-latest.tar.gz \
--hostname uptime-kuma \
--cores 2 \
--memory 1024 \
--swap 512 \
--net0 name=eth0,bridge=vmbr0,ip=dhcp \
--unprivileged 1 \
--start 1
Key Differences: Proxmox OCI vs. Standard Docker Engine
| Feature | Proxmox Native OCI | Standard Docker Engine |
|---|---|---|
| Networking | Dedicated IP on your LAN (vmbr0) | Shared host IP with Port Forwarding (-p) |
| Engine | LXC (Native Linux Containers) | Docker Daemon (dockerd) |
| Backups | Integrated with Proxmox Backup Server (PBS) | Requires third-party tools or volume dumps |
| Docker Compose | Not natively supported (each image = 1 CT) | Supported natively via docker-compose.yml |
| Resource Usage | Near-zero overhead | Small overhead for daemon & bridge networks |