02 - Docker LXC Setup
Date: 2025-12-19
Proxmox: 192.168.0.109
Old RPi server: 192.168.0.102
📋 Starting State¶
✅ Proxmox VE 9.1 installed and configured
✅ 2x 5.5TB HDD formatted, mounted
✅ MergerFS configured (/mnt/storage = 5.5TB pool)
✅ SnapRAID installed and configured
✅ Backup completed on the old RPi server: /mnt/hdd2/backup/2025-12-19/
🖥️ 1. First Web UI Access¶
URL:¶
Login:¶
Result: ✅ Login successful
📦 2. Downloading Debian Template¶
CLI method (used):¶
# Update template list
pveam update
# Available Debian templates
pveam available | grep debian
# Download Debian 12 template
pveam download local debian-12-standard_12.12-1_amd64.tar.zst
Result:
downloading http://download.proxmox.com/images/system/debian-12-standard_12.12-1_amd64.tar.zst
...
TASK OK
Template location:
🐳 3. Creating Docker LXC Container (Web UI)¶
3.1 Start Create CT¶
- Left sidebar: pve node
- Top right corner: Create CT button
3.2 General tab¶
CT ID: 100
Hostname: docker-host
Password: [password set]
Unprivileged container: ✅ ENABLED
Nesting: ✅ ENABLED
3.3 Template tab¶
3.4 Disks tab¶
3.5 CPU tab¶
3.6 Memory tab¶
3.7 Network tab¶
3.8 DNS tab¶
3.9 Confirm¶
Result: ✅ LXC container created (ID: 100)
📁 4. Adding MergerFS Storage Bind Mount¶
4.1 Edit LXC configuration¶
On Proxmox host (SSH):
Added to end of file:
4.2 Restart LXC¶
Result:
🐋 5. Installing Docker Inside the LXC¶
5.1 Enter the LXC¶
Prompt change:
5.2 Verify storage mount¶
Result:
✅ Bind mount working!5.3 System update¶
5.4 Install Docker¶
# Official Docker install script
apt install -y curl
curl -fsSL https://get.docker.com | sh
# Docker Compose plugin
apt install -y docker-compose-plugin
# Verify Docker version
docker --version
docker compose version
Result:
5.5 Create user¶
5.6 Docker volumes directory¶
💾 6. Restoring Backup¶
6.1 Context¶
The Raspberry Pi (192.168.0.102) was dead at this point. The backup resided on the "Filmek2" USB HDD (2TB, /dev/sdd1) which had been physically moved from the Pi to the Proxmox machine and mounted as /mnt/disk4 (see doc 03 - USB HDD Integration).
On the Raspberry Pi this disk was mounted at /mnt/hdd2/, so the backup path on Proxmox is:
6.2 Copy backup to storage¶
On Proxmox host:
mkdir -p /mnt/storage/backup-restore
cp -r /mnt/disk4/backup/2025-12-19/docker/* /mnt/storage/backup-restore/
6.3 Verify backup size¶
Result:
total 7.6G
drwxr-xr-x 24 root root 4.0K Dec 20 18:25 compose
drwxr-xr-x 25 root root 4.0K Dec 20 18:31 config
✅ Backup successfully copied: 7.6GB
📂 7. Restoring Docker Volumes in the LXC¶
7.1 Enter the LXC¶
7.2 Verify backup visibility¶
Result:
total 8.0K
drwxr-xr-x 24 nobody nogroup 4.0K Dec 20 17:25 compose
drwxr-xr-x 25 nobody nogroup 4.0K Dec 20 17:31 config
7.3 Copy Docker volumes back¶
# Copy backup to /srv/docker/
cp -a /mnt/storage/backup-restore/compose/* /srv/docker/
cp -a /mnt/storage/backup-restore/config/* /srv/docker/
# Verify
ls -lh /srv/docker/
Result - Docker applications list:
total 100K
drwxr-xr-x 4 nobody nogroup 4.0K Dec 20 17:27 adguardhome
drwxr-xr-x 9 nobody nogroup 4.0K Dec 20 17:28 bazarr
drwxr-xr-x 2 nobody nogroup 4.0K Dec 20 17:25 calibre-web-automated
drwxr-xr-x 6 nobody nogroup 4.0K Dec 20 17:27 calibrewebauto
drwxr-xr-x 2 nobody nogroup 4.0K Dec 20 17:31 dockge
drwxr-xr-x 2 nobody nogroup 4.0K Dec 20 17:28 dozzle
drwxr-xr-x 9 nobody nogroup 4.0K Dec 20 17:26 homeassistant
drwxr-xr-x 4 nobody nogroup 4.0K Dec 20 17:27 homepage
drwxr-xr-x 15 nobody nogroup 4.0K Dec 20 17:31 huntarr
drwxr-xr-x 9 nobody nogroup 4.0K Dec 20 17:31 jellyfin
drwxr-xr-x 7 nobody nogroup 4.0K Dec 20 17:27 mealie
drwxr-xr-x 4 nobody nogroup 4.0K Dec 20 17:31 nginx-proxy-manager
drwxr-xr-x 3 nobody nogroup 4.0K Dec 20 17:31 notifiarr
drwxr-xr-x 5 nobody nogroup 4.0K Dec 20 17:31 overseerr
drwxr-xr-x 3 nobody nogroup 4.0K Dec 20 17:31 portainer
drwxr-xr-x 7 nobody nogroup 4.0K Dec 20 17:27 prowlarr
drwxr-xr-x 5 nobody nogroup 4.0K Dec 20 17:28 qbittorrent
drwxr-xr-x 7 nobody nogroup 4.0K Dec 20 17:26 radarr
drwxr-xr-x 4 nobody nogroup 4.0K Dec 20 17:31 scrutiny
drwxr-xr-x 5 nobody nogroup 4.0K Dec 20 17:31 seerr
drwxr-xr-x 7 nobody nogroup 4.0K Dec 20 17:31 sonarr
drwxr-xr-x 2 nobody nogroup 4.0K Dec 20 17:25 stirling-pdf
drwxr-xr-x 4 nobody nogroup 4.0K Dec 20 17:28 trainingData
drwxr-xr-x 5 nobody nogroup 4.0K Dec 20 17:27 uptime-kuma
drwxr-xr-x 2 nobody nogroup 4.0K Dec 20 17:26 watchtower
✅ 25 Docker applications restored!
📊 Current State¶
Proxmox Host¶
IP: 192.168.0.109
Storage:
├─ NVMe SSD: 60GB root, 8GB swap, ~150GB data
├─ HDD #1 (sda): 5.5TB data (/mnt/disk1)
├─ HDD #2 (sdb): 5.5TB parity (/mnt/disk2)
└─ MergerFS pool: /mnt/storage (5.5TB)
Docker LXC (ID: 100)¶
Hostname: docker-host
IP: 192.168.0.110
Resources: 4 cores, 4GB RAM, 32GB disk
Storage: /mnt/storage (bind mount)
Docker: ✅ Installed
Docker Compose: ✅ Installed
Applications: 25 stacks restored
Backup¶
Source: 192.168.0.107:/mnt/hdd2/backup/2025-12-19/
Destination: /mnt/storage/backup-restore/ (7.6GB)
Docker volumes: /srv/docker/ (25 applications)
🎯 Next Steps¶
1. Check Docker compose files¶
# Does docker-compose.yml exist everywhere?
find /srv/docker/ -name "docker-compose.yml" -o -name "compose.yaml"
2. Media file location¶
- Question: Where were the movies/series on the old server?
- New location:
/mnt/storage/media/(recommended)
3. Create media directory structure¶
mkdir -p /mnt/storage/media/movies
mkdir -p /mnt/storage/media/tv
mkdir -p /mnt/storage/media/downloads
4. Modify Docker compose files¶
- Update volume paths to new locations
- Example:
5. Set permissions¶
6. Start Docker stacks¶
⚠️ Lessons Learned and Important Notes¶
/tmp problem¶
Problem:
- /tmp is part of the root filesystem (60GB)
- Copying a large backup to /tmp → filesystem filled up
- SSH/HTTP connection dropped
Solution:
- NEVER copy large files to /tmp or /root
- Use the dedicated storage (/mnt/storage = 5.5TB)
Debian version choice¶
Proxmox host: Debian 13 (trixie) - base of Proxmox 9.1
LXC container: Debian 12 (bookworm) - stable, production-ready
This is NOT a problem! The host and container OS are independent of each other.
Backup storage size¶
Full backup: ~40-50GB (docker + nex_home)
Docker volumes: 7.6GB
Difference: user files, images, PDFs, Syncthing DB, Git repos
📝 Useful Commands¶
Proxmox host¶
# Enter LXC
pct enter 100
# LXC status
pct status 100
# LXC start/stop
pct start 100
pct stop 100
# Storage check
df -h
lsblk
LXC container¶
# Docker version
docker --version
docker compose version
# Running containers
docker ps
# Docker logs
docker logs [container-name]
# Start Docker compose
cd /srv/docker/[app]
docker compose up -d
# Stop Docker compose
docker compose down
End of documentation
Last updated: 2025-12-19, 20:00