Post

External Drive to Container Blueprint: Proxmox → VM → Docker

A repeatable blueprint for mounting external drives through Proxmox hosts to VMs and into Docker containers using NFS shares.

External Drive to Container Blueprint: Proxmox → VM → Docker

Blueprint: External Drive → Proxmox → VM → Container

1. Attach and Identify the Drive (Proxmox host)

  • Plug in the external drive.
  • Run:
1
lsblk -f
  • Identify the device (/dev/sda1, /dev/sdb1, etc.), filesystem, and UUID.

2. Create Mount Point(s) (Proxmox host)

  • Decide where to mount it, e.g.:
1
2
3
sudo mkdir -p /mnt/Ext_T7_ssd_nuc3/audiobooks
sudo mkdir -p /mnt/Ext_T7_ssd_nuc3/podcasts
sudo mkdir -p /mnt/Ext_T7_ssd_nuc3/digitalbooks
  • Mount it temporarily:
1
sudo mount /dev/sda1 /mnt/Ext_T7_ssd_nuc3

3. Make Mount Persistent with fstab (Proxmox host)

  • Get the UUID:
1
blkid /dev/sda1
  • Edit /etc/fstab:
1
sudo nano /etc/fstab
  • Add line (replace UUID with yours):
1
UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx /mnt/Ext_T7_ssd_nuc3 ext4 defaults 0 2
  • Test:
1
sudo mount -a

4. Export Folders via NFS (Proxmox host)

  • Edit exports:
1
sudo nano /etc/exports
  • Add lines for each library:
1
2
3
/mnt/Ext_T7_ssd_nuc3/audiobooks   192.168.1.0/24(rw,sync,no_subtree_check,no_root_squash,insecure)
/mnt/Ext_T7_ssd_nuc3/podcasts     192.168.1.0/24(rw,sync,no_subtree_check,no_root_squash,insecure)
/mnt/Ext_T7_ssd_nuc3/digitalbooks 192.168.1.0/24(rw,sync,no_subtree_check,no_root_squash,insecure)
  • Apply:
1
2
sudo exportfs -ra
showmount -e localhost

5. Mount in VM (client side)

  • Create mount points:
1
sudo mkdir -p /mnt/audiobooks /mnt/podcasts /mnt/digitalbooks
  • Test mount:
1
2
3
sudo mount -t nfs 192.168.1.121:/mnt/Ext_T7_ssd_nuc3/audiobooks /mnt/audiobooks
sudo mount -t nfs 192.168.1.121:/mnt/Ext_T7_ssd_nuc3/digitalbooks /mnt/digitalbooks
sudo mount -t nfs 192.168.1.121:/mnt/Ext_T7_ssd_nuc3/podcasts     /mnt/podcasts
  • Make persistent in /etc/fstab on VM:
1
2
3
192.168.1.121:/mnt/Ext_T7_ssd_nuc3/audiobooks   /mnt/audiobooks   nfs defaults 0 0
192.168.1.121:/mnt/Ext_T7_ssd_nuc3/podcasts     /mnt/podcasts     nfs defaults 0 0
192.168.1.121:/mnt/Ext_T7_ssd_nuc3/digitalbooks /mnt/digitalbooks nfs defaults 0 0
  • Reload:
1
sudo mount -a

6. Map Folders into Containers (VM)

  • In your docker-compose.yml:
1
2
3
4
5
6
volumes:
  - ./config:/config
  - ./metadata:/metadata
  - /mnt/audiobooks:/audiobooks
  - /mnt/podcasts:/podcasts
  - /mnt/digitalbooks:/digitalbooks
  • Restart container:
1
sudo docker compose down && sudo docker compose up -d

7. Add Library in the App

  • In Audiobookshelf → add /audiobooks and /podcasts.
  • In Calibre-Web → add /digitalbooks.

✅ Summary

With this process:

  • New libraries (movies, ebooks, comics, etc.) just mean adding a new directory under /mnt/Ext_T7_ssd_nuc3, exporting it, mounting it in the VM, and mapping it into the container.
  • Same steps every time → repeatable blueprint.
This post is licensed under CC BY 4.0 by the author.