LXC Containers are a very quick way to create a psuedo virtual environment.
In the previous LXC article, we explained how to install and configure LXC linux containers.
In this tutorial, we’ll explain how to create a new Linux container, start the container, and login to the LXC virtual console to use the new container.
For demonstration, we’ll be creating a CentOS LXC virtual container in this tutorial, but you can create virtual container for pretty much any Linux distro that you want.
1. LXC Container Templates
Linux Containers LXC by default provides container templates for several popular linux distros. The following are some of the LXC templates that you can use immediately.
- CentOS
- Ubuntu
- Fedora
- OpenSUSE
- Gentoo
- Debian
- Oracle Linux
- ArchLinux
All available LXC templates are located under /usr/local/share/lxc/templates directory.
# ls -1 /usr/local/share/lxc/templates lxc-alpine lxc-altlinux lxc-archlinux lxc-busybox lxc-centos lxc-cirros lxc-debian lxc-download lxc-fedora lxc-gentoo lxc-openmandriva lxc-opensuse lxc-oracle lxc-plamo lxc-sshd lxc-ubuntu lxc-ubuntu-cloud
2. Create a Container using lxc-create
To create the container, use lxc-create command as shown below.
In the following command:
- –n option indicates the container name
- –t option indicates the template that is used to create the container. In this example, we are using lxc-centos template to create a CentOS container.
In this example, this will create the CentOS container with centos minimal install.
This will download all the packages that are required to run the CentOS minimal (for example, approximately around 140 packages), and install them as part of the MyCentOSContainer1 container
# lxc-create -n MyCentOSContainer1 -t /usr/local/share/lxc/templates/lxc-centos /usr/local/share/lxc/templates/lxc-centos Host CPE ID from /etc/system-release-cpe: cpe:/o:centos:linux:6:GA dnsdomainname: Unknown host Checking cache download in /usr/local/var/cache/lxc/centos/x86_64/6/rootfs ... Downloading centos minimal ... ... ... Installing : libgcc-4.4.7-16.el6.x86_64 1/142 Installing : setup-2.8.14-20.el6_4.1.noarch 2/142 Installing : filesystem-2.4.30-3.el6.x86_64 3/142 ... Verifying : gzip-1.3.12-22.el6.x86_64 139/142 Verifying : mingetty-1.08-5.el6.x86_64 140/142 Verifying : libxml2-2.7.6-20.el6_7.1.x86_64 141/142 Verifying : 1:findutils-4.4.2-6.el6.x86_64 142/142 ... Download complete. Copy /usr/local/var/cache/lxc/centos/x86_64/6/rootfs to /usr/local/var/lib/lxc/MyCentOSContainer1/rootfs ... Copying rootfs to /usr/local/var/lib/lxc/MyCentOSContainer1/rootfs ...
3. Root Password for the LXC Container
The root password for the LXC container is stored under: /usr/local/var/lib/lxc/{container-name}/tmp_root_pass
So, in the above example, for the LXC container that we just created, temporary root password is under the following:
# cat /usr/local/var/lib/lxc/MyCentOSContainer1/tmp_root_pass Root-MyCentOSContainer1-pf7qMB
You can change the root password of your container at any time, even if your container is turned off by using chroot from the control host as shown below.
# chroot /usr/local/var/lib/lxc/MyCentOSContainer1/rootfs passwd Changing password for user root. New password: Retype new password: passwd: all authentication tokens updated successfully.
4. Start the LXC Linux Container using lxc-start
Once the container is created, use lxc-start as shown below to start your container.
# lxc-start -n MyCentOSContainer1 lxc-start: cgfs.c: handle_cgroup_settings: 2077 Device or resource busy - failed to set memory.use_hierarchy to 1; continuing CentOS release 6.6 (Final) Kernel 2.6.32-431.el6.x86_64 on an x86_64 MyCentOSContainer1 login: init: rcS main process (8) killed by TERM signal Entering non-interactive startup Bringing up loopback interface: [ OK ] Bringing up interface eth0: Determining IP information for eth0... done. [ OK ] Starting system logger: [ OK ] Mounting filesystems: [ OK ] Generating SSH2 RSA host key: [ OK ] Generating SSH1 RSA host key: [ OK ] Generating SSH2 DSA host key: [ OK ] Starting sshd: [ OK ] CentOS release 6.6 (Final) Kernel 2.6.32-431.el6.x86_64 on an x86_64 MyCentOSContainer1 login:
If you get the following “container failed to start” error message, then something is wrong in your configuration.
# lxc-start -n MyCentOSContainer1 lxc-start: lxc_start.c: main: 344 The container failed to start. lxc-start: lxc_start.c: main: 346 To get more details, run the container in foreground mode. lxc-start: lxc_start.c: main: 348 Additional information can be obtained by setting the --logfile and --logpriority options.
To find-out exactly what is wrong with your configuration, run the LXC container in the foreground using the -F option as shown below.
If you get the following, “failed to attach to bridge”, “failed to create netdev”, “failed to create the network” error message, then bridge adapter is not configured properly on your system.
Check the ifcfg-br0 settings that we mentioned in our earlier LXC Linux Container setup article, to make sure you have the bridge configuration setup properly and working.
# lxc-start -F -n MyCentOSContainer1 lxc-start: conf.c: instantiate_veth: 2796 failed to attach 'veth8VPW29' to the bridge 'lxcbr0': Operation not permitted lxc-start: conf.c: lxc_create_network: 3079 failed to create netdev lxc-start: start.c: lxc_spawn: 935 failed to create the network lxc-start: start.c: __lxc_start: 1192 failed to spawn 'MyCentOSContainer1' lxc-start: lxc_start.c: main: 344 The container failed to start. lxc-start: lxc_start.c: main: 348 Additional information can be obtained by setting the --logfile and --logpriority options.
5. View Container Info using lxc-info
To display detailed information about your container, use lxc-info command as shown below.
# lxc-info -n MyCentOSContainer1 Name: MyCentOSContainer1 State: RUNNING PID: 7696 IP: 192.168.100.101 CPU use: 1.61 seconds BlkIO use: 32.00 KiB Memory use: 2.63 MiB Link: vethLNI1UH TX bytes: 1.98 KiB RX bytes: 46.08 KiB Total bytes: 48.06 KiB
6. Stop LXC Linux Container using lxc-stop
To stop your LXC linux container use lxc-stop as shown below, and specify the container name that you like to stop.
# lxc-stop -n MyCentOSContainer1
7. Clone an Existing Container using lxc-clone
Cloning is useful when you want to take a snapshot of the old container before you make any changes to the configuration on the container. You can use this as a simple backup method for container configuration.
Cloning the container can be done using lxc-clone command as shown below. In this case, the new container name is MyCentOSContainer2
# lxc-clone -o MyCentOSContainer1 -n MyCentOSContainer2 Created container MyCentOSContainer2 as copy of MyCentOSContainer1
8. Delete an Existing Container using lxc-destory
To delete an existing container, use lxc-destroy command as shown below.
# lxc-destroy -n MyCentOSContainer2
9. Connect to LXC Linux Container Console
To connect to the console of the container, use the following lxc-console command.
# lxc-console -n MyCentOSContainer1 Connected to tty 1 Type Ctrl+a q to exit the console, Ctrl+a Ctrl+a to enter Ctrl+a itself CentOS release 6.6 (Final) Kernel 2.6.32-431.el6.x86_64 on an x86_64 MyCentOSContainer1 login:
10. Change LXC Configurations using lxc-config
To change the LXC configuration, you can use lxc-config command.
First, use lxc-config -l option, which will just display all the available configurations as shown below.
# lxc-config -l lxc.default_config lxc.lxcpath lxc.bdev.lvm.vg lxc.bdev.lvm.thin_pool lxc.bdev.zfs.root lxc.cgroup.use lxc.cgroup.pattern
Next, use lxc.default_config option as shown below to view information about each configuration file and its associated parameters.
# lxc-config lxc.default_config /usr/local/etc/lxc/default.conf # cat /usr/local/etc/lxc/default.conf lxc.network.type = veth lxc.network.link = virbr0 lxc.network.flags = up
The following command will display the LXC patch where all the containers are stored.
# lxc-config lxc.lxcpath /usr/local/var/lib/lxc
As we see below, we see the two containers that we created under this directory.
# cd /usr/local/var/lib/lxc # ls MyCentOSContainer1 MyCentOSContainer2
Under the container directory, you’ll see the config file, which contains all the basic configuration information for that particular container as shown below.
# cd /usr/local/var/lib/lxc/MyCentOSContainer1 # vi config lxc.network.type = veth lxc.network.link = virbr0 lxc.network.hwaddr = fb:bb:f2:87:e8:17 lxc.network.flags = up lxc.rootfs = /usr/local/var/lib/lxc/MyCentOSContainer1/rootfs lxc.include = /usr/local/share/lxc/config/centos.common.conf lxc.arch = x86_64 lxc.utsname = MyCentOSContainer1
Comments on this entry are closed.
Thanks ..I searched the right document for lxc and found one.. Keep posting more in containers ..good work of you continues ..
Ramesh,
I set this up on Arch Linux and was trying to login using the ‘lxc-console -n MyCentOSContainer1’ command. I tried logging in using both ‘root’ and ‘admin’ to login without success. I’m stuck on this step. Please help.
Scott
Thanks for documentation, can you please provide more details on templates.
Like from where we can get multiple type of templates which we can add in or implement with LXC.
Also provide us the pros and cons of LXC vs Docker
Thanks
clearly expressed and instructive.
Hi Ramesh,
I was following this tutorial but i got isue when
lxc-start -n MyCentOSContainer1
and the trace was, any idea of what happened here?
lxc-start: utils.c: open_without_symlink: 1626 No such file or directory – Error examining fuse in /usr/local/lib/lxc/rootfs/sys/fs/fuse/connections
lxc-start: utils.c: open_without_symlink: 1626 No such file or directory – Error examining cgroup in /usr/local/lib/lxc/rootfs/sys/fs/cgroup
lxc-start: cgfs.c: cgroupfs_mount_cgroup: 1372 No such file or directory – could not mount tmpfs to /sys/fs/cgroup in the container
lxc-start: conf.c: lxc_mount_auto_mounts: 866 No such file or directory – error mounting /sys/fs/cgroup
lxc-start: conf.c: lxc_setup: 3936 failed to setup the automatic mounts for ‘MyCentOSContainer1’
lxc-start: start.c: do_start: 717 failed to setup the container
lxc-start: sync.c: __sync_wait: 51 invalid sequence number 1. expected 2
lxc-start: start.c: __lxc_start: 1192 failed to spawn ‘MyCentOSContainer1’
lxc-start: lxc_start.c: main: 344 The container failed to start.
lxc-start: lxc_start.c: main: 348 Additional information can be obtained by setting the –logfile and –logpriority options.
Hi Jesus/Ramesh,
I am getting same error , are you able to solve this problem if yes then please help me out. I am new to linux.
lxc-start: cgfs.c: handle_cgroup_settings: 2091 Device or resource busy – failed to set memory.use_hierarchy to 1; continuing
lxc-start: cgfs.c: handle_cgroup_settings: 2091 Device or resource busy – failed to set memory.use_hierarchy to 1; continuing
lxc-start: utils.c: open_without_symlink: 1626 No such file or directory – Error examining fuse in /usr/local/lib/lxc/rootfs/sys/fs/fuse/connections
lxc-start: utils.c: open_without_symlink: 1626 No such file or directory – Error examining cgroup in /usr/local/lib/lxc/rootfs/sys/fs/cgroup
lxc-start: cgfs.c: cgroupfs_mount_cgroup: 1372 No such file or directory – could not mount tmpfs to /sys/fs/cgroup in the container
lxc-start: conf.c: lxc_mount_auto_mounts: 866 No such file or directory – error mounting /sys/fs/cgroup
lxc-start: conf.c: lxc_setup: 3936 failed to setup the automatic mounts for ‘dmszone’
lxc-start: start.c: do_start: 717 failed to setup the container
lxc-start: sync.c: __sync_wait: 51 invalid sequence number 1. expected 2
lxc-start: start.c: __lxc_start: 1192 failed to spawn ‘dmszone’
lxc-start: lxc_start.c: main: 344 The container failed to start.
lxc-start: lxc_start.c: main: 348 Additional information can be obtained by setting the –logfile and –logpriority options.
Hi,
I am also getting the below error. Any help will be highly appreciated.
lxc-start: cgfs.c: handle_cgroup_settings: 2091 Device or resource busy – failed to set memory.use_hierarchy to 1; continuing
lxc-start: cgfs.c: handle_cgroup_settings: 2091 Device or resource busy – failed to set memory.use_hierarchy to 1; continuing
lxc-start: utils.c: open_without_symlink: 1626 No such file or directory – Error examining cgroup in /usr/local/lib/lxc/rootfs/sys/fs/cgroup
lxc-start: cgfs.c: cgroupfs_mount_cgroup: 1372 No such file or directory – could not mount tmpfs to /sys/fs/cgroup in the container
lxc-start: conf.c: lxc_mount_auto_mounts: 866 No such file or directory – error mounting /sys/fs/cgroup
lxc-start: conf.c: lxc_setup: 3936 failed to setup the automatic mounts for ‘MyCentOSContainer1’
lxc-start: start.c: do_start: 717 failed to setup the container
lxc-start: sync.c: __sync_wait: 51 invalid sequence number 1. expected 2
lxc-start: start.c: __lxc_start: 1192 failed to spawn ‘MyCentOSContainer1’
lxc-start: lxc_start.c: main: 344 The container failed to start.
lxc-start: lxc_start.c: main: 348 Additional information can be obtained by setting the –logfile and –logpriority options.
[root@DMS-Linux dmsadmin]#