Skip to content
View in the app

A better way to browse. Learn more.

Unraid

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

[Plugin] LXC Plugin

Featured Replies

DEPRECATION NOTICE

This plugin is no longer actively developed further.

Please note that this doesn't mean that it will not work anymore, this is only means that it won't receiver updates.

LXC

(Unraid 6.10.0+)

 

LXC is a well-known Linux container runtime that consists of tools, templates, and library and language bindings. It's pretty low level, very flexible and covers just about every containment feature supported by the upstream kernel.

This plugin doesn't include the LXD provided CLI tool lxc!

 

This allows you basically to run a isolated system with shared resources on CLI level (without a GUI) on Unraid which can be deployed in a matter of seconds and also allows you to destroy it quickly.

Please keep in mind that if you have to set up everything manually after deploying the container eg: SSH access or a dedicated user account else than root

 

 

ATTENTION: This plugin is currently in development and features will be added over time.

 

cgroup v2 (ONLY NECESSARY if you are below Unraid version 6.12.0): Distributions which use systemd (Ubuntu, Debian Bookworm+,...) will not work unless you enable cgroup v2

To enable cgroup v2 append the following to your syslinux.conf and reboot afterwards:

unraidcgroup2

(Unraid supports cgroup v2 since version v6.11.0-rc4)

image.png.c0209d354ea9c766761687c9befd87b1.png

 

 

  1. Install LXC from the CA App:
    grafik.png.05b66c641f621b78b8636b20a460816c.png

     

  2. Go to the Settings tab in Unraid an click on "LXC"
    image.png.f6c695caec8772271ba20abcf1950e88.png

     

  3. Enable the LXC service, select the default storage path for your images (this path will be created if it doesn't exist and it always needs to have a trailing / ) and click on "Update":
    image.thumb.png.d1bf251f24fc1532a3fb6e1442e06568.png
    ATTENTION:
    - It is strongly recommended that you are using a real path like "/mnt/cache/lxc/" or "/mnt/diskX/lxc/" instead of a FUSE "/mnt/user/lxc/" to avoid slowing down the entire system when performing heavy I/O operations in the container(s) and to avoid issues when the Mover wants to move data from a container which is currently running.
    - It is also strongly recommended to not share this path over NFS or SMB because if the permissions are messed up the container won't start anymore and to avoid data loss in the container(s)!
    - Never run New Permissions from the Unraid Tools menu on this directory because you will basically destroy your container(s)!

     

  4. Now you can see the newly created directory in your Shares tab in Unraid, if you are using a real path (what is strongly recommended) weather it's on the Cache or Array it should be fine to leave the Use Cache setting at No because the Mover won't touch this directory if it's set to No:
    image.png.0bd9e627e0c6258d69d8b3676faddf65.png

     

  5. Now you will see LXC appearing in Unraid, click on it to navigate to it
    image.png.1001d8a7d3a4993c5232da0e136c32a0.png

     

  6. Click on "Add Container" to add a container:
    image.thumb.png.8620c945be773cf21617fddfe8a9f2b7.png

     

  7. On the next page you can specify the Container Name, the Distribution, Release, MAC Address and if Autostart should be enabled for the container, click on "Create":
    image.thumb.png.3c25c6933aba7fff9c34314009f3aa72.png
    You can get a full list of Distributions and Releases to choose from here
    The MAC Address will be generated randomly every time, you can change it if you need specific one.
    The Autostart checkbox let's you choose if the container should start up when the Array or LXC service is started or not (can be changed later).

     

  8. In the next popup you will see information about the installation status from the container (don't close this window until you see the "Done" button) :
    image.png.c0653b72930392d939ac2ef3019316f4.png

     

  9. After clicking on "Done" and "Done" in the previous window you will be greeted with this screen on the LXC page, to start the container click on "Start":
    image.thumb.png.8034bc399a05d1d08d0f4f7844e515f5.png
    If you want to disable the Autostart from the container click on "Disable" and the button will change to "Enable", click on "Enable" to enable it again.

     

  10. After starting the container you will see several information (assigned CPUs, Memory usage, IP Address) about the container itself:
    image.thumb.png.cafa3ea1a1db1c6e64e78d5e92706217.png

     

  11. By clicking on the container name you will get the storage location from your configuration file from this container and the config file contents itself:
    image.thumb.png.280998d467c8c4c4e31a92de2b69a06e.png
    For further information on the configuration file see here

     

  12. Now you can attach to the started container by clicking the Terminal symbol image.png.df536ffdea3a475f1d4b6a8cf58595f6.png in the top right corner from Unraid and typing in lxc-attach CONTAINERNAME /bin/bash (in this case lxc-attach DebianLXC /bin/bash):
    image.png.a5740d6e3e7b71ed7be21359019a6573.png
    You can of course also connect to the container without /bin/bash but it is always recommended to connect to the shell that you prefer

     

  13. Now you will see that the terminal changed the hostname to the containers name this means that you are now successfully attached to the shell from the container and the container is ready to use.
    I recommend to always do a update from the packages first, for Debian based container run this command (apt-get update && apt-get upgrade):
    image.png.835d38a2c5aaf20c0ba15f6f1733e8d7.png

     

 

Please keep in mind that this container is pretty much empty and nothing else than the basic tools are installed, so you have to install nano, vi, openssh-server,.. yourself.

 

 

To install the SSH Server (for Debian based containers) see the second post.

  • Replies 899
  • Views 158k
  • Created
  • Last Reply

Top Posters In This Topic

Most Popular Posts

  • Install SSH Server in Debian based containers:     Method 1 (recommended) :   Attach to the container with "lxc-attach DebianLXC /bin/bash" (replace DebianLXC with your con

  • Is someone here interested in something like a "Button" on the create container page where a Debian Bullseye container is set up with a pretty basic Desktop environment (XFCE4) in conjunction with Tur

  • domrockt
    domrockt

    AWSOMEEEEEEE   

Posted Images

  • Author

Install SSH Server in Debian based containers:

 

 

Method 1 (recommended) :

 

  1. Attach to the container with "lxc-attach DebianLXC /bin/bash" (replace DebianLXC with your container name) :
    image.png.848f698e89e00f2269f7e2bcc2d732c9.png

     
  2. I would first recommend that you add a password for the user root, to do so enter "passwd" and enter your preferred root password two times (there is nothing displayed while typing) :
    image.png.7353e6a8a088759084ccbb865de11fa9.png

     
  3. Now Create a user with the command "useradd -m debian -s /bin/bash" (in this case the newly created username is "debian") :
    image.png.03a23ba0ad3c6e55ff631f95e500bf7a.png

     
  4. In the next step we will create a password for the user "debian" with the command "passwd debian" (replace "debian" with your preferred username) type in the password two times like above for the root user:
    image.png.f3f5c7421960b94b530d52518b95f492.png

     
  5. Now install the openssh-server with "apt-get -y install openssh-server":
    image.png.ef0df4f7df37d9a094a9b8889abd5828.png

     
  6. After it successfully installed you can close the terminal window from the LXC container, connect via SSH to the container via Putty or your preferred SSH client through the IP from your container and the username "debian" and the password set for the user "debian" (in this example we will connect through a Linux shell with the command "ssh [email protected]" you see the IP address in the LXC tab in Unraid) :
    image.png.9168c528364fb2f8a27a92d1a129f309.png
     

Now you are connected through SSH with the user "debian" to your LXC container.

 

 

 

Method 2 (not recommended - root connection) :

 

  1. Attach to the container with "lxc-attach DebianLXC /bin/bash" (replace DebianLXC with your container name):
    image.png.848f698e89e00f2269f7e2bcc2d732c9.png

     
  2. I would first recommend that you add a password for the user root, to do so enter "passwd" and enter your preferred root password two times (there is nothing displayed while typing) :
    image.png.7353e6a8a088759084ccbb865de11fa9.png

     
  3. Now install the openssh-server with "apt-get -y install openssh-server":
    image.png.ef0df4f7df37d9a094a9b8889abd5828.png

     
  4. Now issue the command: "sed -i "/#PermitRootLogin prohibit-password/c\PermitRootLogin yes" /etc/ssh/sshd_config" (this will basically change your SSH configuration file so that you can login with the root account through SSH) :
    image.png.f106ea6a9e98b11f897dc281744b06eb.png

     
  5. Restart the sshd service with the command "systemctl restart sshd" to apply the new settings:
    image.png.c40164a800736722c60a92e85b159dc8.png

     
  6. After that you can close the terminal window from the LXC container, connect via SSH to the container via Putty or your preferred SSH client through the IP from your container and the username "root" and the password set for the "root" user (in this example we will connect through a Linux shell with the command "ssh [email protected]" you see the IP address in the LXC tab in Unraid) :
    image.png.6e56aefb4265e0ce2ad8d6384e63ae2d.png

 

Now you see that you are connected through SSH with the user "root" to your LXC container.

wow very good for me

Been waiting for something like this.  I just created a ubuntu bionic container and have no network connection.  Nothing is shown on the page under address and 'ip a' doesn't show an IP address either.  

 

 

EDIT:  I was able to get network connectivity using

lxc.net.0.ipv4.address
lxc.net.0.ipv4.gateway

 

But I don't see a place to put dns resolver info.

Edited by jmztaylor

Oh my god I love you so much. You have no idea how much I have been praying for LXC support on unraid. Thank you so, so, so much!

  • Author
5 minutes ago, jmztaylor said:

But I don't see a place to put dns resolver info.

You should be able to do this inside the container itself if the Gateway and the Address are assigned correctly within the container.

I think this should help: Click

1 minute ago, ich777 said:

You should be able to do this inside the container itself if the Gateway and the Address are assigned correctly within the container.

I think this should help: Click

 

Yeah thats what I did to get network connectivity.  Still, all IP functions work like pinging my router but anything domain 'temporary failure in name resolution'

  • Author
1 minute ago, wtfcr0w said:

Is there a possibility of adding TurnKey containers in the future? https://www.turnkeylinux.org/all

This seems possible but I first want to get it running stable and need a few responses if everything works well.

1 minute ago, ich777 said:

This seems possible but I first want to get it running stable and need a few responses if everything works well.

Understood!! You're awesome for getting this going in the first place. Serious kudos for you.

 

So far I am running a Debian Buster container without any issues. Trying to figure out how to pass through a USB device right now..

Edited by wtfcr0w

  • Author
2 minutes ago, jmztaylor said:

Yeah thats what I did to get network connectivity.  Still, all IP functions work like pinging my router but anything domain 'temporary failure in name resolution'

Will look into this... :)

  • Author
9 minutes ago, jmztaylor said:

Yeah thats what I did to get network connectivity.

There you have it:

lxc-start -F BionicTest
Failed to mount cgroup at /sys/fs/cgroup/systemd: Operation not permitted
[!!!!!!] Failed to mount API filesystems, freezing.
Freezing execution.

 

It's also failing because systemd is missing.

Try to set up a Debian Bullseye container, it should work fine for now if this is a viable option for you.

 

EDIT: You actually have to kill the container or wait until the timeout kicks in if you click on Stop.

6 minutes ago, ich777 said:

There you have it:

lxc-start -F BionicTest
Failed to mount cgroup at /sys/fs/cgroup/systemd: Operation not permitted
[!!!!!!] Failed to mount API filesystems, freezing.
Freezing execution.

 

It's also failing because systemd is missing.

Try to set up a Debian Bullseye container, it should work fine for now if this is a viable option for you.

 

EDIT: You actually have to kill the machine or wait until the timeout kicks in if you click on Stop.

 

Bullseye works fine.  I saw in the first post Ubuntu 19+ wont work.  Im not familiar with systemd so thought 18 would work.  But yes I can reproduce that.  Thanks

Edited by jmztaylor

  • Author
Just now, jmztaylor said:

Bullseye works fine.  I saw in the first post Ubuntu 19+ wont work.  So thought 18 would work.  But yes I can reproduce that.  Thanks

Already changed the first post, I haven't been able to test everything so far because there are a lot of images...

 

I can so far confirm that Homeassistant Core is working fine, Docker is working fine (with containers who doesn't need privileged rights), I've also made a container that uses noVNC in conjunction with TurboVNC to get a Desktop environment through a browser (xrdp should also work with a few tweaks from what I know).

  • Author
20 minutes ago, wtfcr0w said:

Trying to figure out how to pass through a USB device right now..

List your USB devices with "lsusb":

Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 005: ID 8564:1000 Transcend Information, Inc. JetFlash
Bus 001 Device 003: ID 05e3:0610 Genesys Logic, Inc. Hub
Bus 001 Device 002: ID 1a86:7523 QinHeng Electronics CH340 serial converter
Bus 001 Device 007: ID 0781:5567 SanDisk Corp. Cruzer Blade
Bus 001 Device 006: ID 05e3:0610 Genesys Logic, Inc. Hub
Bus 001 Device 004: ID 0b05:18f3 ASUSTek Computer, Inc. AURA LED Controller
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

 

Let's say I want to add "Bus 001 Device 004: ID 0b05:18f3 ASUSTek Computer, Inc. AURA LED Controller" to the container, do a "ls -l /dev/bus/usb/001/004":

crw-rw-r-- 1 root root 189, 3 May 22 07:02 /dev/bus/usb/001/004

 

After that add these lines to the end of your config file for the container:

lxc.cgroup.devices.allow = c 189:* rwm
lxc.mount.entry = /dev/bus/usb/001/004 dev/bus/usb/001/004 none bind,optional,create=file 

 

 

This is actually untested but this is how it should work.

I've also tried Ubuntu Jammy and Fedora 36, no dice. Neither of them start.

Just now, ich777 said:

List your USB devices with "lsusb":

Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 005: ID 8564:1000 Transcend Information, Inc. JetFlash
Bus 001 Device 003: ID 05e3:0610 Genesys Logic, Inc. Hub
Bus 001 Device 002: ID 1a86:7523 QinHeng Electronics CH340 serial converter
Bus 001 Device 007: ID 0781:5567 SanDisk Corp. Cruzer Blade
Bus 001 Device 006: ID 05e3:0610 Genesys Logic, Inc. Hub
Bus 001 Device 004: ID 0b05:18f3 ASUSTek Computer, Inc. AURA LED Controller
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

 

Let's say I want to add "Bus 001 Device 004: ID 0b05:18f3 ASUSTek Computer, Inc. AURA LED Controller" to the container, do a "ls -l /dev/bus/usb/001/004":

crw-rw-r-- 1 root root 189, 3 May 22 07:02 /dev/bus/usb/001/004

 

After that add these lines to the end of your config file for the container:

lxc.cgroup.devices.allow: c 189:* rwm
lxc.mount.entry: /dev/bus/usb/001/004 dev/bus/usb/001/004 none bind,optional,create=file 

 

 

This is actually untested but this is how it should work.

I found that as well, tried it and no go. As soon as I altered the config file the LXC container disappeared from the LXC page.

  • Author
Just now, wtfcr0w said:

I've also tried Ubuntu Jammy and Fedora 36, no dice. Neither of them start.

You can always troubleshoot by starting it from the command line with the command:

lxc-start -F CONTAINERNAME

 

This will run the container in Foreground and should tell you what failed.

  • Author
1 minute ago, wtfcr0w said:

I found that as well, tried it and no go. As soon as I altered the config file the LXC container disappeared from the LXC page.

Ah sorry edited the post above, the format was wrong, it should be = instead of :

27 minutes ago, ich777 said:

Ah sorry edited the post above, the format was wrong, it should be = instead of :

I was able to pass it through and find it in /dev but for some reason I cant utilize the device. Messed around with permissions, probably have to alter udev rules or something. I'll have to play around with it later this evening.

 

Also, when attempting to start Fedora in the foreground I get this:

lxc-start -F Fedora
Failed to mount cgroup at /sys/fs/cgroup/systemd: Operation not permitted [!!!!!!]
Failed to mount API filesystems, freezing.
Freezing execution.

 

Great job though. I can see this going far!

  • Author
27 minutes ago, wtfcr0w said:

Also, when attempting to start Fedora in the foreground I get this:

Also the systemd issue…

 

27 minutes ago, wtfcr0w said:

Great job though. I can see this going far!

Hope it‘s enough for now…

 

I will definitely continue to improve the plugin but I was a little concerned releasing the plugin with the systemd issues.

8 minutes ago, ich777 said:

Hope it‘s enough for now…

 

I will definitely continue to improve the plugin but I was a little concerned releasing the plugin with the systemd issues.

It's definitely enough. I'm thrilled to have even just the Debian lxc working! Thank you so much.

  • Author
Just now, wtfcr0w said:

I'm thrilled to have even just the Debian lxc working!

Me too because this saves a lot of resources on my server to because I use a LXC container with Docker installed in it to build all my Docker containers locally and push it to DockerHub and the GitHub Container Registry. :)

Planing also to switch over my Homeassistant Docker container to the LXC Homassistant Core version because I was never really satisfied with the Docker container.

 

Please also let me know about your findings with the USB passthrough <- this is a thing on my to do list but as you can imagine my to do list is pretty long... :D

interested to see how this goes. I have just virtualised unraid on proxmox to also play with lxc alongside....

 

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

Account

Navigation

Search

Search

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.