PVE LXC Containers

From Da Nerd Mage Wiki
Jump to navigation Jump to search
Successful-Containers.png

Note: I am just beginning to learn the ins & outs of LXC containers.

So far, LXC containers are just like regular Linux (for the most part...) & the same procedures apply when building.

In fact, I have created a large set of containers on my testbed server simply by following the Server Building outlines here on this site.

Building a Container

Templates

LXC Containers start with a template.

For our example here, we're going to start with a basic Debian 11 template.

This means we need to ensure we have the template on the PVE host.

  • Sign into the PVE UI & select your Local datastore
  • Select the CT Templates storage
  • Click the Templates button
  • Select a template package (we're going with debian-11-standard) then hit the Download button

Creating the Container

Web UI method

Now that you have a template to start from, you can hit the Create CT button.

For now, we'll create a very basic container. I've found that most of the defaults are fine for single service applications. The only resource I've found a need to increase so far is CPU cores.  Memory can be increased later if needed (as can CPU cores) and actual data storage should be handled outside of the boot disk anyhow.

  • 1st screen: choose an ID# and a hostname for the container. Then enter the password for root on this container (twice...). Then hit Next
  • 2nd screen: select the template we downloaded above. Then hit Next
  • 3rd screen: choose a storage location & boot disk size. Then hit Next
  • 4th screen: how many CPU cores you want available to the container. Then hit Next
  • 5th screen: how much memory you want available to the container. Then hit Next
  • 6th screen: set up networking (you'll note it defaults to static addressing...  silly...) Then hit Next
  • 7th screen: set up DNS (Why in heck this isn't considered part of networking...) Then hit Next
  • 8th (final) screen: Look things over to make sure they're the way you want them.  Possibly check the Start after created box. Then hit Finish

CLI method

  • pct create VMID TEMPLATE --hostname HOSTNAME --password PASSWORD --rootfs LOCATION:SIZE --cores CORES --memory RAM --swap SWAP --unprivileged <1|0> --features nesting=<1|0> --net0 name=eth0,bridge=BRIDGE,firewall=<1|0>,ip=<(IPv4/CIDR|dhcp|manual)>
  • EXAMPLE (same as defaults in UI, but DHCP for IPv4 & unique identifiers...):
    • pct create 666 local:vztmpl/debian-11-standard_11.6-1_amd64.tar.zst --hostname LXC-test --password nuggit --rootfs local-lvm:8 --cores 1 --memory 512 --swap 512 --unprivileged 1 --features nesting=1 --net0 name=eth0,bridge=vmbr0,firewall=1,ip=dhcp
  • Many more options to be found in the man page for pct

Configuring & Using the Container

Congratulations!

You have an LXC container.

The only user account currently configured is root.

There will be minor oddities, but basically, it's a lightweight VM.

At this point,, for all intents and purposes, it works just like a normal Linux VM. You can sign in at its console and set it up like you would a VM.

I'd suggest adding a regular user so that you can then SSH into the container.

Pre-Built Containers

PVE has a bunch of templates available by a company called Turnkey Linux.  I've tried a couple...  Not overly impressed so far, but YMMV.

Stumbling Blocks & Oddities

DHCP / DNS Difficulties

For some reason, If I set up a container with both IPv4 & IPv6 using DHCP, resolved will ONLY use IPv6. This is kind of an issue if I want to use IPv4 DNS...

Fortunately, simply setting IPv6 to Static fixes the issue.

Console connection from the PVE UI

LXC containers seem to default to xterm.js rather than the noVNC console standard with regular VMs.

This isn't a bad thing... Just surprised me.

Standard LXC containers built upon Debian seem to block non-root users from using ping...

ping: socket: Operation not permitted

Discussion & a solution

Solution #3 seems most appropriate...

  • sudo chmod u+s /usr/bin/ping

PVE CLI Tools for LXC work...

  • pct (Proxmox Container Toolkit)
  • pveam (Proxmox VE Appliance Manager)