]> git.proxmox.com Git - pve-docs.git/blame - pct.adoc
pct: add section for supported distributions
[pve-docs.git] / pct.adoc
CommitLineData
80c0adcb 1[[chapter_pct]]
0c6b782f 2ifdef::manvolnum[]
b2f242ab 3pct(1)
7e2fdb3d 4======
5f09af76
DM
5:pve-toplevel:
6
0c6b782f
DM
7NAME
8----
9
10pct - Tool to manage Linux Containers (LXC) on Proxmox VE
11
12
49a5e11c 13SYNOPSIS
0c6b782f
DM
14--------
15
16include::pct.1-synopsis.adoc[]
17
18DESCRIPTION
19-----------
20endif::manvolnum[]
21
22ifndef::manvolnum[]
23Proxmox Container Toolkit
24=========================
194d2f29 25:pve-toplevel:
0c6b782f 26endif::manvolnum[]
5f09af76 27ifdef::wiki[]
cb84ed18 28:title: Linux Container
5f09af76 29endif::wiki[]
4a2ae9ed 30
14e97811
OB
31Containers are a lightweight alternative to fully virtualized machines (VMs).
32They use the kernel of the host system that they run on, instead of emulating a
33full operating system (OS). This means that containers can access resources on
34the host system directly.
4a2ae9ed 35
6d718b9b
TL
36The runtime costs for containers is low, usually negligible. However, there are
37some drawbacks that need be considered:
4a2ae9ed 38
fd7fb228
DW
39* Only Linux distributions can be run in Proxmox Containers. It is not possible to run
40 other operating systems like, for example, FreeBSD or Microsoft Windows
6d718b9b 41 inside a container.
4a2ae9ed 42
6d718b9b 43* For security reasons, access to host resources needs to be restricted.
fd7fb228
DW
44 Therefore, containers run in their own separate namespaces. Additionally some
45 syscalls (user space requests to the Linux kernel) are not allowed within containers.
4a2ae9ed 46
fd7fb228 47{pve} uses https://linuxcontainers.org/lxc/introduction/[Linux Containers (LXC)] as its underlying
6d718b9b 48container technology. The ``Proxmox Container Toolkit'' (`pct`) simplifies the
fd7fb228
DW
49usage and management of LXC, by providing an interface that abstracts
50complex tasks.
4a2ae9ed 51
14e97811
OB
52Containers are tightly integrated with {pve}. This means that they are aware of
53the cluster setup, and they can use the same network and storage resources as
54virtual machines. You can also use the {pve} firewall, or manage containers
55using the HA framework.
4a2ae9ed 56
fd7fb228
DW
57Our primary goal is to offer an environment that provides the benefits of using a
58VM, but without the additional overhead. This means that Proxmox Containers can
59be categorized as ``System Containers'', rather than ``Application Containers''.
4a2ae9ed 60
fd7fb228
DW
61NOTE: If you want to run application containers, for example, 'Docker' images, it
62is recommended that you run them inside a Proxmox Qemu VM. This will give you
63all the advantages of application containerization, while also providing the
64benefits that VMs offer, such as strong isolation from the host and the ability
65to live-migrate, which otherwise isn't possible with containers.
4a2ae9ed
DM
66
67
99f6ae1a
DM
68Technology Overview
69-------------------
70
71* LXC (https://linuxcontainers.org/)
72
6d718b9b 73* Integrated into {pve} graphical web user interface (GUI)
99f6ae1a
DM
74
75* Easy to use command line tool `pct`
76
77* Access via {pve} REST API
78
6d718b9b 79* 'lxcfs' to provide containerized /proc file system
99f6ae1a 80
6d718b9b 81* Control groups ('cgroups') for resource isolation and limitation
99f6ae1a 82
6d718b9b 83* 'AppArmor' and 'seccomp' to improve security
99f6ae1a 84
14e97811 85* Modern Linux kernels
99f6ae1a 86
a645c907 87* Image based deployment (xref:pct_supported_distributions[templates])
99f6ae1a 88
6d718b9b 89* Uses {pve} xref:chapter_storage[storage library]
99f6ae1a 90
14e97811 91* Container setup from host (network, DNS, storage, etc.)
99f6ae1a 92
69ab602f 93
a645c907
OB
94[[pct_supported_distributions]]
95Supported Distributions
96~~~~~~~~~~~~~~~~~~~~~~~
97
98List of officially supported distributions can be found below.
99
100Templates for the following distributions are available through our
101repositories. You can use xref:pct_container_images[pveam] tool or the
102Graphical User Interface to download them.
103
104Alpine Linux
105^^^^^^^^^^^^
106
107[quote, 'https://alpinelinux.org']
108____
109"Alpine Linux is a security-oriented, lightweight Linux distribution based on
110musl libc and busybox."
111____
112
113https://alpinelinux.org/releases/
114
115Archlinux
116^^^^^^^^^
117
118[quote, 'https://wiki.archlinux.org/title/Arch_Linux']
119____
120"a lightweight and flexible Linux® distribution that tries to Keep It Simple."
121____
122
123
124CentOS, Almalinux, Rocky Linux
125^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
126
127__CentOS__:
128
129[quote, 'https://centos.org']
130____
131"The CentOS Linux distribution is a stable, predictable, manageable and
132reproducible platform derived from the sources of Red Hat Enterprise Linux
133(RHEL)"
134____
135
136https://wiki.centos.org/About/Product
137
138__Almalinux__:
139
140[quote, 'https://almalinux.org']
141____
142"An Open Source, community owned and governed, forever-free
143enterprise Linux distribution, focused on long-term stability, providing a
144robust production-grade platform. AlmaLinux OS is 1:1 binary compatible with
145RHEL® and pre-Stream CentOS."
146____
147
148
149https://en.wikipedia.org/wiki/AlmaLinux#Releases
150
151__Rocky Linux__:
152
153[quote, 'https://rockylinux.org']
154____
155"Rocky Linux is a community enterprise operating system designed
156to be 100% bug-for-bug compatible with America's top enterprise Linux
157distribution now that its downstream partner has shifted direction."
158____
159
160https://en.wikipedia.org/wiki/Rocky_Linux#Releases
161
162
163Debian
164^^^^^^
165
166[quote, 'https://www.debian.org/intro/index#software']
167____
168"Debian is a free operating system, developed and maintained by the Debian
169project. A free Linux distribution with thousands of applications to meet our
170users' needs."
171____
172
173https://www.debian.org/releases/stable/releasenotes
174
175Devuan
176^^^^^^
177
178[quote, 'https://www.devuan.org']
179____
180"Devuan GNU+Linux is a fork of Debian without systemd that allows users to
181reclaim control over their system by avoiding unnecessary entanglements and
182ensuring Init Freedom."
183____
184
185
186Fedora
187^^^^^^
188
189[quote, 'https://getfedora.org']
190____
191"Fedora creates an innovative, free, and open source platform for hardware,
192clouds, and containers that enables software developers and community members
193to build tailored solutions for their users."
194____
195
196https://fedoraproject.org/wiki/Releases
197
198Gentoo
199^^^^^^
200
201[quote, 'https://www.gentoo.org']
202____
203"a highly flexible, source-based Linux distribution."
204____
205
206OpenSUSE
207^^^^^^^^
208
209[quote, 'https://www.opensuse.org']
210____
211"The makers' choice for sysadmins, developers and desktop users."
212____
213
214https://get.opensuse.org/leap/
215
216Ubuntu
217^^^^^^
218
219[quote, 'https://docs.ubuntu.com/']
220____
221"The world’s most popular Linux for desktop computing."
222____
223
224https://wiki.ubuntu.com/Releases
225
80c0adcb 226[[pct_container_images]]
d61bab51
DM
227Container Images
228----------------
229
8c1189b6 230Container images, sometimes also referred to as ``templates'' or
69ab602f 231``appliances'', are `tar` archives which contain everything to run a container.
d61bab51 232
a645c907
OB
233{pve} itself provides a variety of basic templates for the
234xref:pct_supported_distributions[most common Linux distributions]. They can be
235downloaded using the GUI or the `pveam` (short for {pve} Appliance Manager)
236command line utility. Additionally, https://www.turnkeylinux.org/[TurnKey
237Linux] container templates are also available to download.
d61bab51 238
2a368b1e
TL
239The list of available templates is updated daily through the 'pve-daily-update'
240timer. You can also trigger an update manually by executing:
3a6fa247 241
14e97811
OB
242----
243# pveam update
244----
3a6fa247 245
14e97811 246To view the list of available images run:
3a6fa247 247
14e97811
OB
248----
249# pveam available
250----
3a6fa247 251
8c1189b6
FG
252You can restrict this large list by specifying the `section` you are
253interested in, for example basic `system` images:
3a6fa247
DM
254
255.List available system images
256----
257# pveam available --section system
151bbda8
TL
258system alpine-3.12-default_20200823_amd64.tar.xz
259system alpine-3.13-default_20210419_amd64.tar.xz
260system alpine-3.14-default_20210623_amd64.tar.xz
261system archlinux-base_20210420-1_amd64.tar.gz
14e97811 262system centos-7-default_20190926_amd64.tar.xz
151bbda8 263system centos-8-default_20201210_amd64.tar.xz
14e97811 264system debian-9.0-standard_9.7-1_amd64.tar.gz
151bbda8
TL
265system debian-10-standard_10.7-1_amd64.tar.gz
266system devuan-3.0-standard_3.0_amd64.tar.gz
267system fedora-33-default_20201115_amd64.tar.xz
268system fedora-34-default_20210427_amd64.tar.xz
269system gentoo-current-default_20200310_amd64.tar.xz
270system opensuse-15.2-default_20200824_amd64.tar.xz
14e97811
OB
271system ubuntu-16.04-standard_16.04.5-1_amd64.tar.gz
272system ubuntu-18.04-standard_18.04.1-1_amd64.tar.gz
151bbda8
TL
273system ubuntu-20.04-standard_20.04-1_amd64.tar.gz
274system ubuntu-20.10-standard_20.10-1_amd64.tar.gz
275system ubuntu-21.04-standard_21.04-1_amd64.tar.gz
3a6fa247
DM
276----
277
69ab602f 278Before you can use such a template, you need to download them into one of your
2a368b1e
TL
279storages. If you're unsure to which one, you can simply use the `local` named
280storage for that purpose. For clustered installations, it is preferred to use a
281shared storage so that all nodes can access those images.
3a6fa247 282
14e97811
OB
283----
284# pveam download local debian-10.0-standard_10.0-1_amd64.tar.gz
285----
3a6fa247 286
69ab602f
TL
287You are now ready to create containers using that image, and you can list all
288downloaded images on storage `local` with:
24f73a63
DM
289
290----
291# pveam list local
14e97811 292local:vztmpl/debian-10.0-standard_10.0-1_amd64.tar.gz 219.95MB
24f73a63
DM
293----
294
2a368b1e
TL
295TIP: You can also use the {pve} web interface GUI to download, list and delete
296container templates.
297
298`pct` uses them to create a new container, for example:
299
300----
301# pct create 999 local:vztmpl/debian-10.0-standard_10.0-1_amd64.tar.gz
302----
303
69ab602f
TL
304The above command shows you the full {pve} volume identifiers. They include the
305storage name, and most other {pve} commands can use them. For example you can
306delete that image later with:
24f73a63 307
14e97811
OB
308----
309# pveam remove local:vztmpl/debian-10.0-standard_10.0-1_amd64.tar.gz
310----
d61bab51 311
690cd737 312
f3afbb70 313[[pct_settings]]
4f785ca7
DM
314Container Settings
315------------------
316
304eb5a9
EK
317[[pct_general]]
318General Settings
319~~~~~~~~~~~~~~~~
320
1ff5e4e8 321[thumbnail="screenshot/gui-create-ct-general.png"]
2225402c 322
304eb5a9
EK
323General settings of a container include
324
325* the *Node* : the physical server on which the container will run
69ab602f
TL
326* the *CT ID*: a unique number in this {pve} installation used to identify your
327 container
304eb5a9
EK
328* *Hostname*: the hostname of the container
329* *Resource Pool*: a logical group of containers and VMs
330* *Password*: the root password of the container
331* *SSH Public Key*: a public key for connecting to the root account over SSH
332* *Unprivileged container*: this option allows to choose at creation time
69ab602f 333 if you want to create a privileged or unprivileged container.
304eb5a9 334
14e97811
OB
335Unprivileged Containers
336^^^^^^^^^^^^^^^^^^^^^^^
337
69ab602f
TL
338Unprivileged containers use a new kernel feature called user namespaces.
339The root UID 0 inside the container is mapped to an unprivileged user outside
340the container. This means that most security issues (container escape, resource
14e97811
OB
341abuse, etc.) in these containers will affect a random unprivileged user, and
342would be a generic kernel security bug rather than an LXC issue. The LXC team
343thinks unprivileged containers are safe by design.
344
345This is the default option when creating a new container.
346
69ab602f
TL
347NOTE: If the container uses systemd as an init system, please be aware the
348systemd version running inside the container should be equal to or greater than
349220.
14e97811 350
304eb5a9
EK
351
352Privileged Containers
353^^^^^^^^^^^^^^^^^^^^^
354
c02ac25b
TL
355Security in containers is achieved by using mandatory access control 'AppArmor'
356restrictions, 'seccomp' filters and Linux kernel namespaces. The LXC team
357considers this kind of container as unsafe, and they will not consider new
358container escape exploits to be security issues worthy of a CVE and quick fix.
359That's why privileged containers should only be used in trusted environments.
304eb5a9 360
304eb5a9 361
9a5e9443 362[[pct_cpu]]
9a5e9443
DM
363CPU
364~~~
365
1ff5e4e8 366[thumbnail="screenshot/gui-create-ct-cpu.png"]
097aa949 367
14e97811
OB
368You can restrict the number of visible CPUs inside the container using the
369`cores` option. This is implemented using the Linux 'cpuset' cgroup
69ab602f
TL
370(**c**ontrol *group*).
371A special task inside `pvestatd` tries to distribute running containers among
372available CPUs periodically.
373To view the assigned CPUs run the following command:
9a5e9443
DM
374
375----
376# pct cpusets
377 ---------------------
378 102: 6 7
379 105: 2 3 4 5
380 108: 0 1
381 ---------------------
382----
383
14e97811
OB
384Containers use the host kernel directly. All tasks inside a container are
385handled by the host CPU scheduler. {pve} uses the Linux 'CFS' (**C**ompletely
386**F**air **S**cheduler) scheduler by default, which has additional bandwidth
387control options.
9a5e9443
DM
388
389[horizontal]
0725e3c6 390
69ab602f
TL
391`cpulimit`: :: You can use this option to further limit assigned CPU time.
392Please note that this is a floating point number, so it is perfectly valid to
393assign two cores to a container, but restrict overall CPU consumption to half a
394core.
9a5e9443
DM
395+
396----
397cores: 2
398cpulimit: 0.5
399----
400
69ab602f
TL
401`cpuunits`: :: This is a relative weight passed to the kernel scheduler. The
402larger the number is, the more CPU time this container gets. Number is relative
403to the weights of all the other running containers. The default is 1024. You
404can use this setting to prioritize some containers.
9a5e9443
DM
405
406
407[[pct_memory]]
408Memory
409~~~~~~
410
1ff5e4e8 411[thumbnail="screenshot/gui-create-ct-memory.png"]
097aa949 412
9a5e9443
DM
413Container memory is controlled using the cgroup memory controller.
414
415[horizontal]
416
69ab602f
TL
417`memory`: :: Limit overall memory usage. This corresponds to the
418`memory.limit_in_bytes` cgroup setting.
9a5e9443 419
69ab602f
TL
420`swap`: :: Allows the container to use additional swap memory from the host
421swap space. This corresponds to the `memory.memsw.limit_in_bytes` cgroup
422setting, which is set to the sum of both value (`memory + swap`).
9a5e9443 423
4f785ca7
DM
424
425[[pct_mount_points]]
9e44e493
DM
426Mount Points
427~~~~~~~~~~~~
eeecce95 428
1ff5e4e8 429[thumbnail="screenshot/gui-create-ct-root-disk.png"]
097aa949 430
14e97811 431The root mount point is configured with the `rootfs` property. You can
69ab602f
TL
432configure up to 256 additional mount points. The corresponding options are
433called `mp0` to `mp255`. They can contain the following settings:
01639994
FG
434
435include::pct-mountpoint-opts.adoc[]
436
69ab602f
TL
437Currently there are three types of mount points: storage backed mount points,
438bind mounts, and device mounts.
9e44e493 439
5eba0743 440.Typical container `rootfs` configuration
4c3b5c77
DM
441----
442rootfs: thin1:base-100-disk-1,size=8G
443----
444
445
5eba0743 446Storage Backed Mount Points
4c3b5c77 447^^^^^^^^^^^^^^^^^^^^^^^^^^^
01639994 448
9e44e493 449Storage backed mount points are managed by the {pve} storage subsystem and come
eeecce95
WB
450in three different flavors:
451
5eba0743 452- Image based: these are raw images containing a single ext4 formatted file
eeecce95 453 system.
5eba0743 454- ZFS subvolumes: these are technically bind mounts, but with managed storage,
eeecce95
WB
455 and thus allow resizing and snapshotting.
456- Directories: passing `size=0` triggers a special case where instead of a raw
457 image a directory is created.
458
03782251
FG
459NOTE: The special option syntax `STORAGE_ID:SIZE_IN_GB` for storage backed
460mount point volumes will automatically allocate a volume of the specified size
69ab602f
TL
461on the specified storage. For example, calling
462
463----
464pct set 100 -mp0 thin1:10,mp=/path/in/container
465----
466
467will allocate a 10GB volume on the storage `thin1` and replace the volume ID
468place holder `10` with the allocated volume ID, and setup the moutpoint in the
469container at `/path/in/container`
03782251 470
4c3b5c77 471
5eba0743 472Bind Mount Points
4c3b5c77 473^^^^^^^^^^^^^^^^^
01639994 474
9baca183
FG
475Bind mounts allow you to access arbitrary directories from your Proxmox VE host
476inside a container. Some potential use cases are:
477
478- Accessing your home directory in the guest
479- Accessing an USB device directory in the guest
acccc49b 480- Accessing an NFS mount from the host in the guest
9baca183 481
eeecce95 482Bind mounts are considered to not be managed by the storage subsystem, so you
9baca183 483cannot make snapshots or deal with quotas from inside the container. With
eeecce95 484unprivileged containers you might run into permission problems caused by the
9baca183
FG
485user mapping and cannot use ACLs.
486
8c1189b6 487NOTE: The contents of bind mount points are not backed up when using `vzdump`.
eeecce95 488
69ab602f
TL
489WARNING: For security reasons, bind mounts should only be established using
490source directories especially reserved for this purpose, e.g., a directory
491hierarchy under `/mnt/bindmounts`. Never bind mount system directories like
492`/`, `/var` or `/etc` into a container - this poses a great security risk.
9baca183
FG
493
494NOTE: The bind mount source path must not contain any symlinks.
495
496For example, to make the directory `/mnt/bindmounts/shared` accessible in the
497container with ID `100` under the path `/shared`, use a configuration line like
8c1189b6
FG
498`mp0: /mnt/bindmounts/shared,mp=/shared` in `/etc/pve/lxc/100.conf`.
499Alternatively, use `pct set 100 -mp0 /mnt/bindmounts/shared,mp=/shared` to
9baca183 500achieve the same result.
6b707f2c 501
4c3b5c77 502
5eba0743 503Device Mount Points
4c3b5c77 504^^^^^^^^^^^^^^^^^^^
fe154a4f 505
7432d78e
FG
506Device mount points allow to mount block devices of the host directly into the
507container. Similar to bind mounts, device mounts are not managed by {PVE}'s
508storage subsystem, but the `quota` and `acl` options will be honored.
509
510NOTE: Device mount points should only be used under special circumstances. In
511most cases a storage backed mount point offers the same performance and a lot
512more features.
513
69ab602f
TL
514NOTE: The contents of device mount points are not backed up when using
515`vzdump`.
01639994 516
4c3b5c77 517
80c0adcb 518[[pct_container_network]]
f5c351f0
DM
519Network
520~~~~~~~
04c569f6 521
1ff5e4e8 522[thumbnail="screenshot/gui-create-ct-network.png"]
097aa949 523
69ab602f
TL
524You can configure up to 10 network interfaces for a single container.
525The corresponding options are called `net0` to `net9`, and they can contain the
526following setting:
bac8c385
DM
527
528include::pct-network-opts.adoc[]
04c569f6
DM
529
530
139a9019
DM
531[[pct_startup_and_shutdown]]
532Automatic Start and Shutdown of Containers
533~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
534
14e97811
OB
535To automatically start a container when the host system boots, select the
536option 'Start at boot' in the 'Options' panel of the container in the web
537interface or run the following command:
139a9019 538
14e97811
OB
539----
540# pct set CTID -onboot 1
541----
139a9019 542
4dbeb548
DM
543.Start and Shutdown Order
544// use the screenshot from qemu - its the same
1ff5e4e8 545[thumbnail="screenshot/gui-qemu-edit-start-order.png"]
4dbeb548 546
69ab602f
TL
547If you want to fine tune the boot order of your containers, you can use the
548following parameters:
139a9019 549
69ab602f
TL
550* *Start/Shutdown order*: Defines the start order priority. For example, set it
551 to 1 if you want the CT to be the first to be started. (We use the reverse
552 startup order for shutdown, so a container with a start order of 1 would be
553 the last to be shut down)
554* *Startup delay*: Defines the interval between this container start and
555 subsequent containers starts. For example, set it to 240 if you want to wait
556 240 seconds before starting other containers.
139a9019 557* *Shutdown timeout*: Defines the duration in seconds {pve} should wait
69ab602f
TL
558 for the container to be offline after issuing a shutdown command.
559 By default this value is set to 60, which means that {pve} will issue a
560 shutdown request, wait 60s for the machine to be offline, and if after 60s
561 the machine is still online will notify that the shutdown action failed.
139a9019 562
69ab602f
TL
563Please note that containers without a Start/Shutdown order parameter will
564always start after those where the parameter is set, and this parameter only
139a9019
DM
565makes sense between the machines running locally on a host, and not
566cluster-wide.
567
0f7778ac
DW
568If you require a delay between the host boot and the booting of the first
569container, see the section on
570xref:first_guest_boot_delay[Proxmox VE Node Management].
571
572
c2c8eb89
DC
573Hookscripts
574~~~~~~~~~~~
575
576You can add a hook script to CTs with the config property `hookscript`.
577
14e97811
OB
578----
579# pct set 100 -hookscript local:snippets/hookscript.pl
580----
c2c8eb89 581
69ab602f
TL
582It will be called during various phases of the guests lifetime. For an example
583and documentation see the example script under
c2c8eb89 584`/usr/share/pve-docs/examples/guest-example-hookscript.pl`.
139a9019 585
bf7f598a
TL
586Security Considerations
587-----------------------
588
589Containers use the kernel of the host system. This exposes an attack surface
590for malicious users. In general, full virtual machines provide better
656d8b21 591isolation. This should be considered if containers are provided to unknown or
bf7f598a
TL
592untrusted people.
593
594To reduce the attack surface, LXC uses many security features like AppArmor,
595CGroups and kernel namespaces.
596
c02ac25b
TL
597AppArmor
598~~~~~~~~
599
bf7f598a
TL
600AppArmor profiles are used to restrict access to possibly dangerous actions.
601Some system calls, i.e. `mount`, are prohibited from execution.
602
603To trace AppArmor activity, use:
604
605----
606# dmesg | grep apparmor
607----
608
c02ac25b
TL
609Although it is not recommended, AppArmor can be disabled for a container. This
610brings security risks with it. Some syscalls can lead to privilege escalation
611when executed within a container if the system is misconfigured or if a LXC or
612Linux Kernel vulnerability exists.
613
614To disable AppArmor for a container, add the following line to the container
615configuration file located at `/etc/pve/lxc/CTID.conf`:
616
617----
76aaaeab 618lxc.apparmor.profile = unconfined
c02ac25b
TL
619----
620
621WARNING: Please note that this is not recommended for production use.
622
623
17238cd3
WB
624[[pct_cgroup]]
625Control Groups ('cgroup')
626~~~~~~~~~~~~~~~~~~~~~~~~~
627
628'cgroup' is a kernel
629mechanism used to hierarchically organize processes and distribute system
630resources.
631
632The main resources controlled via 'cgroups' are CPU time, memory and swap
633limits, and access to device nodes. 'cgroups' are also used to "freeze" a
634container before taking snapshots.
635
636There are 2 versions of 'cgroups' currently available,
637https://www.kernel.org/doc/html/v5.11/admin-guide/cgroup-v1/index.html[legacy]
638and
639https://www.kernel.org/doc/html/v5.11/admin-guide/cgroup-v2.html['cgroupv2'].
640
641Since {pve} 7.0, the default is a pure 'cgroupv2' environment. Previously a
642"hybrid" setup was used, where resource control was mainly done in 'cgroupv1'
643with an additional 'cgroupv2' controller which could take over some subsystems
644via the 'cgroup_no_v1' kernel command line parameter. (See the
645https://www.kernel.org/doc/html/latest/admin-guide/kernel-parameters.html[kernel
646parameter documentation] for details.)
647
75d3c2be
TL
648[[pct_cgroup_compat]]
649CGroup Version Compatibility
650^^^^^^^^^^^^^^^^^^^^^^^^^^^^
17238cd3
WB
651The main difference between pure 'cgroupv2' and the old hybrid environments
652regarding {pve} is that with 'cgroupv2' memory and swap are now controlled
653independently. The memory and swap settings for containers can map directly to
654these values, whereas previously only the memory limit and the limit of the
655*sum* of memory and swap could be limited.
656
657Another important difference is that the 'devices' controller is configured in a
658completely different way. Because of this, file system quotas are currently not
659supported in a pure 'cgroupv2' environment.
660
c80d381a
SI
661'cgroupv2' support by the container's OS is needed to run in a pure 'cgroupv2'
662environment. Containers running 'systemd' version 231 or newer support
663'cgroupv2' footnote:[this includes all newest major versions of container
664templates shipped by {pve}], as do containers not using 'systemd' as init
665system footnote:[for example Alpine Linux].
666
75d3c2be
TL
667[NOTE]
668====
669CentOS 7 and Ubuntu 16.10 are two prominent Linux distributions releases,
670which have a 'systemd' version that is too old to run in a 'cgroupv2'
671environment, you can either
c80d381a 672
75d3c2be
TL
673* Upgrade the whole distribution to a newer release. For the examples above, that
674 could be Ubuntu 18.04 or 20.04, and CentOS 8 (or RHEL/CentOS derivatives like
675 AlmaLinux or Rocky Linux). This has the benefit to get the newest bug and
676 security fixes, often also new features, and moving the EOL date in the future.
677
678* Upgrade the Containers systemd version. If the distribution provides a
679 backports repository this can be an easy and quick stop-gap measurement.
680
681* Move the container, or its services, to a Virtual Machine. Virtual Machines
682 have a much less interaction with the host, that's why one can install
683 decades old OS versions just fine there.
684
685* Switch back to the legacy 'cgroup' controller. Note that while it can be a
686 valid solution, it's not a permanent one. There's a high likelihood that a
687 future {pve} major release, for example 8.0, cannot support the legacy
688 controller anymore.
689====
690
691[[pct_cgroup_change_version]]
692Changing CGroup Version
693^^^^^^^^^^^^^^^^^^^^^^^
694
695TIP: If file system quotas are not required and all containers support 'cgroupv2',
c80d381a 696it is recommended to stick to the new default.
17238cd3
WB
697
698To switch back to the previous version the following kernel command line
699parameter can be used:
700
701----
702systemd.unified_cgroup_hierarchy=0
703----
704
705See xref:sysboot_edit_kernel_cmdline[this section] on editing the kernel boot
706command line on where to add the parameter.
707
708// TODO: seccomp a bit more.
c02ac25b
TL
709// TODO: pve-lxc-syscalld
710
711
0892a2c2
TL
712Guest Operating System Configuration
713------------------------------------
714
715{pve} tries to detect the Linux distribution in the container, and modifies
716some files. Here is a short list of things done at container startup:
717
718set /etc/hostname:: to set the container name
719
720modify /etc/hosts:: to allow lookup of the local hostname
721
722network setup:: pass the complete network setup to the container
723
724configure DNS:: pass information about DNS servers
725
726adapt the init system:: for example, fix the number of spawned getty processes
727
728set the root password:: when creating a new container
729
730rewrite ssh_host_keys:: so that each container has unique keys
731
732randomize crontab:: so that cron does not start at the same time on all containers
733
734Changes made by {PVE} are enclosed by comment markers:
735
736----
737# --- BEGIN PVE ---
738<data>
739# --- END PVE ---
740----
741
742Those markers will be inserted at a reasonable location in the file. If such a
743section already exists, it will be updated in place and will not be moved.
744
745Modification of a file can be prevented by adding a `.pve-ignore.` file for it.
746For instance, if the file `/etc/.pve-ignore.hosts` exists then the `/etc/hosts`
747file will not be touched. This can be a simple empty file created via:
748
749----
750# touch /etc/.pve-ignore.hosts
751----
752
753Most modifications are OS dependent, so they differ between different
754distributions and versions. You can completely disable modifications by
755manually setting the `ostype` to `unmanaged`.
756
757OS type detection is done by testing for certain files inside the
3d5c55fc
TL
758container. {pve} first checks the `/etc/os-release` file
759footnote:[/etc/os-release replaces the multitude of per-distribution
760release files https://manpages.debian.org/stable/systemd/os-release.5.en.html].
761If that file is not present, or it does not contain a clearly recognizable
762distribution identifier the following distribution specific release files are
763checked.
0892a2c2
TL
764
765Ubuntu:: inspect /etc/lsb-release (`DISTRIB_ID=Ubuntu`)
766
767Debian:: test /etc/debian_version
768
769Fedora:: test /etc/fedora-release
770
771RedHat or CentOS:: test /etc/redhat-release
772
773ArchLinux:: test /etc/arch-release
774
775Alpine:: test /etc/alpine-release
776
777Gentoo:: test /etc/gentoo-release
778
779NOTE: Container start fails if the configured `ostype` differs from the auto
780detected type.
781
782
b0df9949
TL
783[[pct_container_storage]]
784Container Storage
785-----------------
786
787The {pve} LXC container storage model is more flexible than traditional
788container storage models. A container can have multiple mount points. This
789makes it possible to use the best suited storage for each application.
790
791For example the root file system of the container can be on slow and cheap
792storage while the database can be on fast and distributed storage via a second
793mount point. See section <<pct_mount_points, Mount Points>> for further
794details.
795
796Any storage type supported by the {pve} storage library can be used. This means
797that containers can be stored on local (for example `lvm`, `zfs` or directory),
798shared external (like `iSCSI`, `NFS`) or even distributed storage systems like
799Ceph. Advanced storage features like snapshots or clones can be used if the
800underlying storage supports them. The `vzdump` backup tool can use snapshots to
801provide consistent container backups.
802
803Furthermore, local devices or local directories can be mounted directly using
804'bind mounts'. This gives access to local resources inside a container with
805practically zero overhead. Bind mounts can be used as an easy way to share data
806between containers.
807
808
809FUSE Mounts
810~~~~~~~~~~~
811
812WARNING: Because of existing issues in the Linux kernel's freezer subsystem the
813usage of FUSE mounts inside a container is strongly advised against, as
814containers need to be frozen for suspend or snapshot mode backups.
815
816If FUSE mounts cannot be replaced by other mounting mechanisms or storage
817technologies, it is possible to establish the FUSE mount on the Proxmox host
818and use a bind mount point to make it accessible inside the container.
819
820
821Using Quotas Inside Containers
822~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
823
824Quotas allow to set limits inside a container for the amount of disk space that
825each user can use.
826
17238cd3
WB
827NOTE: This currently requires the use of legacy 'cgroups'.
828
b0df9949
TL
829NOTE: This only works on ext4 image based storage types and currently only
830works with privileged containers.
831
832Activating the `quota` option causes the following mount options to be used for
833a mount point:
834`usrjquota=aquota.user,grpjquota=aquota.group,jqfmt=vfsv0`
835
836This allows quotas to be used like on any other system. You can initialize the
837`/aquota.user` and `/aquota.group` files by running:
838
839----
840# quotacheck -cmug /
841# quotaon /
842----
843
844Then edit the quotas using the `edquota` command. Refer to the documentation of
845the distribution running inside the container for details.
846
847NOTE: You need to run the above commands for every mount point by passing the
848mount point's path instead of just `/`.
849
850
851Using ACLs Inside Containers
852~~~~~~~~~~~~~~~~~~~~~~~~~~~~
853
854The standard Posix **A**ccess **C**ontrol **L**ists are also available inside
855containers. ACLs allow you to set more detailed file ownership than the
856traditional user/group/others model.
857
858
859Backup of Container mount points
860~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
861
862To include a mount point in backups, enable the `backup` option for it in the
863container configuration. For an existing mount point `mp0`
864
865----
866mp0: guests:subvol-100-disk-1,mp=/root/files,size=8G
867----
868
869add `backup=1` to enable it.
870
871----
872mp0: guests:subvol-100-disk-1,mp=/root/files,size=8G,backup=1
873----
874
875NOTE: When creating a new mount point in the GUI, this option is enabled by
876default.
877
878To disable backups for a mount point, add `backup=0` in the way described
879above, or uncheck the *Backup* checkbox on the GUI.
880
881Replication of Containers mount points
882~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
883
884By default, additional mount points are replicated when the Root Disk is
885replicated. If you want the {pve} storage replication mechanism to skip a mount
886point, you can set the *Skip replication* option for that mount point.
887As of {pve} 5.0, replication requires a storage of type `zfspool`. Adding a
888mount point to a different type of storage when the container has replication
889configured requires to have *Skip replication* enabled for that mount point.
890
891
51e33128
FG
892Backup and Restore
893------------------
894
5eba0743 895
2175e37b
FG
896Container Backup
897~~~~~~~~~~~~~~~~
898
69ab602f
TL
899It is possible to use the `vzdump` tool for container backup. Please refer to
900the `vzdump` manual page for details.
8c1189b6 901
51e33128 902
2175e37b
FG
903Restoring Container Backups
904~~~~~~~~~~~~~~~~~~~~~~~~~~~
905
69ab602f
TL
906Restoring container backups made with `vzdump` is possible using the `pct
907restore` command. By default, `pct restore` will attempt to restore as much of
908the backed up container configuration as possible. It is possible to override
909the backed up configuration by manually setting container options on the
910command line (see the `pct` manual page for details).
2175e37b 911
8c1189b6 912NOTE: `pvesm extractconfig` can be used to view the backed up configuration
2175e37b
FG
913contained in a vzdump archive.
914
915There are two basic restore modes, only differing by their handling of mount
916points:
917
4c3b5c77 918
8c1189b6
FG
919``Simple'' Restore Mode
920^^^^^^^^^^^^^^^^^^^^^^^
2175e37b 921
69ab602f
TL
922If neither the `rootfs` parameter nor any of the optional `mpX` parameters are
923explicitly set, the mount point configuration from the backed up configuration
924file is restored using the following steps:
2175e37b
FG
925
926. Extract mount points and their options from backup
324efba3
FG
927. Create volumes for storage backed mount points on the storage provided with
928 the `storage` parameter (default: `local`).
2175e37b 929. Extract files from backup archive
69ab602f
TL
930. Add bind and device mount points to restored configuration (limited to root
931 user)
2175e37b
FG
932
933NOTE: Since bind and device mount points are never backed up, no files are
934restored in the last step, but only the configuration options. The assumption
935is that such mount points are either backed up with another mechanism (e.g.,
936NFS space that is bind mounted into many containers), or not intended to be
937backed up at all.
938
939This simple mode is also used by the container restore operations in the web
940interface.
941
4c3b5c77 942
8c1189b6
FG
943``Advanced'' Restore Mode
944^^^^^^^^^^^^^^^^^^^^^^^^^
2175e37b
FG
945
946By setting the `rootfs` parameter (and optionally, any combination of `mpX`
8c1189b6 947parameters), the `pct restore` command is automatically switched into an
2175e37b 948advanced mode. This advanced mode completely ignores the `rootfs` and `mpX`
69ab602f
TL
949configuration options contained in the backup archive, and instead only uses
950the options explicitly provided as parameters.
2175e37b 951
69ab602f
TL
952This mode allows flexible configuration of mount point settings at restore
953time, for example:
2175e37b
FG
954
955* Set target storages, volume sizes and other options for each mount point
69ab602f 956 individually
2175e37b
FG
957* Redistribute backed up files according to new mount point scheme
958* Restore to device and/or bind mount points (limited to root user)
959
51e33128 960
8c1189b6 961Managing Containers with `pct`
04c569f6
DM
962------------------------------
963
6d718b9b
TL
964The ``Proxmox Container Toolkit'' (`pct`) is the command line tool to manage
965{pve} containers. It enables you to create or destroy containers, as well as
966control the container execution (start, stop, reboot, migrate, etc.). It can be
967used to set parameters in the config file of a container, for example the
968network configuration or memory limits.
5eba0743 969
04c569f6
DM
970CLI Usage Examples
971~~~~~~~~~~~~~~~~~~
972
69ab602f
TL
973Create a container based on a Debian template (provided you have already
974downloaded the template via the web interface)
04c569f6 975
14e97811
OB
976----
977# pct create 100 /var/lib/vz/template/cache/debian-10.0-standard_10.0-1_amd64.tar.gz
978----
04c569f6
DM
979
980Start container 100
981
14e97811
OB
982----
983# pct start 100
984----
04c569f6
DM
985
986Start a login session via getty
987
14e97811
OB
988----
989# pct console 100
990----
04c569f6
DM
991
992Enter the LXC namespace and run a shell as root user
993
14e97811
OB
994----
995# pct enter 100
996----
04c569f6
DM
997
998Display the configuration
999
14e97811
OB
1000----
1001# pct config 100
1002----
04c569f6 1003
69ab602f
TL
1004Add a network interface called `eth0`, bridged to the host bridge `vmbr0`, set
1005the address and gateway, while it's running
04c569f6 1006
14e97811
OB
1007----
1008# pct set 100 -net0 name=eth0,bridge=vmbr0,ip=192.168.15.147/24,gw=192.168.15.1
1009----
04c569f6
DM
1010
1011Reduce the memory of the container to 512MB
1012
14e97811
OB
1013----
1014# pct set 100 -memory 512
1015----
0585f29a 1016
87927c65
DJ
1017Destroying a container always removes it from Access Control Lists and it always
1018removes the firewall configuration of the container. You have to activate
1019'--purge', if you want to additionally remove the container from replication jobs,
1020backup jobs and HA resource configurations.
1021
1022----
1023# pct destroy 100 --purge
1024----
1025
1026
04c569f6 1027
fe57a420
FG
1028Obtaining Debugging Logs
1029~~~~~~~~~~~~~~~~~~~~~~~~
1030
1031In case `pct start` is unable to start a specific container, it might be
59b89a69
OB
1032helpful to collect debugging output by passing the `--debug` flag (replace `CTID` with
1033the container's CTID):
fe57a420 1034
14e97811 1035----
59b89a69
OB
1036# pct start CTID --debug
1037----
1038
97e4455e
TL
1039Alternatively, you can use the following `lxc-start` command, which will save
1040the debug log to the file specified by the `-o` output option:
59b89a69
OB
1041
1042----
1043# lxc-start -n CTID -F -l DEBUG -o /tmp/lxc-CTID.log
14e97811 1044----
fe57a420 1045
69ab602f 1046This command will attempt to start the container in foreground mode, to stop
59b89a69 1047the container run `pct shutdown CTID` or `pct stop CTID` in a second terminal.
fe57a420 1048
59b89a69 1049The collected debug log is written to `/tmp/lxc-CTID.log`.
fe57a420
FG
1050
1051NOTE: If you have changed the container's configuration since the last start
1052attempt with `pct start`, you need to run `pct start` at least once to also
1053update the configuration used by `lxc-start`.
1054
33f50e04
DC
1055[[pct_migration]]
1056Migration
1057---------
1058
1059If you have a cluster, you can migrate your Containers with
1060
14e97811
OB
1061----
1062# pct migrate <ctid> <target>
1063----
33f50e04
DC
1064
1065This works as long as your Container is offline. If it has local volumes or
14e97811 1066mount points defined, the migration will copy the content over the network to
ba021358 1067the target host if the same storage is defined there.
33f50e04 1068
656d8b21 1069Running containers cannot live-migrated due to technical limitations. You can
4c82550d
TL
1070do a restart migration, which shuts down, moves and then starts a container
1071again on the target node. As containers are very lightweight, this results
1072normally only in a downtime of some hundreds of milliseconds.
1073
1074A restart migration can be done through the web interface or by using the
1075`--restart` flag with the `pct migrate` command.
33f50e04 1076
69ab602f
TL
1077A restart migration will shut down the Container and kill it after the
1078specified timeout (the default is 180 seconds). Then it will migrate the
1079Container like an offline migration and when finished, it starts the Container
1080on the target node.
c7bc47af
DM
1081
1082[[pct_configuration]]
1083Configuration
1084-------------
1085
69ab602f
TL
1086The `/etc/pve/lxc/<CTID>.conf` file stores container configuration, where
1087`<CTID>` is the numeric ID of the given container. Like all other files stored
1088inside `/etc/pve/`, they get automatically replicated to all other cluster
1089nodes.
c7bc47af
DM
1090
1091NOTE: CTIDs < 100 are reserved for internal purposes, and CTIDs need to be
1092unique cluster wide.
1093
1094.Example Container Configuration
1095----
1096ostype: debian
1097arch: amd64
1098hostname: www
1099memory: 512
1100swap: 512
1101net0: bridge=vmbr0,hwaddr=66:64:66:64:64:36,ip=dhcp,name=eth0,type=veth
1102rootfs: local:107/vm-107-disk-1.raw,size=7G
1103----
1104
69ab602f 1105The configuration files are simple text files. You can edit them using a normal
da9679b6 1106text editor, for example, `vi` or `nano`.
69ab602f
TL
1107This is sometimes useful to do small corrections, but keep in mind that you
1108need to restart the container to apply such changes.
c7bc47af 1109
69ab602f
TL
1110For that reason, it is usually better to use the `pct` command to generate and
1111modify those files, or do the whole thing using the GUI.
1112Our toolkit is smart enough to instantaneously apply most changes to running
da9679b6 1113containers. This feature is called ``hot plug'', and there is no need to restart
69ab602f 1114the container in that case.
c7bc47af 1115
da9679b6 1116In cases where a change cannot be hot-plugged, it will be registered as a
69ab602f
TL
1117pending change (shown in red color in the GUI).
1118They will only be applied after rebooting the container.
14e97811 1119
c7bc47af
DM
1120
1121File Format
1122~~~~~~~~~~~
1123
69ab602f
TL
1124The container configuration file uses a simple colon separated key/value
1125format. Each line has the following format:
c7bc47af
DM
1126
1127-----
1128# this is a comment
1129OPTION: value
1130-----
1131
69ab602f
TL
1132Blank lines in those files are ignored, and lines starting with a `#` character
1133are treated as comments and are also ignored.
c7bc47af 1134
69ab602f 1135It is possible to add low-level, LXC style configuration directly, for example:
c7bc47af 1136
14e97811
OB
1137----
1138lxc.init_cmd: /sbin/my_own_init
1139----
c7bc47af
DM
1140
1141or
1142
14e97811
OB
1143----
1144lxc.init_cmd = /sbin/my_own_init
1145----
c7bc47af 1146
14e97811 1147The settings are passed directly to the LXC low-level tools.
c7bc47af
DM
1148
1149
1150[[pct_snapshots]]
1151Snapshots
1152~~~~~~~~~
1153
69ab602f
TL
1154When you create a snapshot, `pct` stores the configuration at snapshot time
1155into a separate snapshot section within the same configuration file. For
1156example, after creating a snapshot called ``testsnapshot'', your configuration
1157file will look like this:
c7bc47af
DM
1158
1159.Container configuration with snapshot
1160----
1161memory: 512
1162swap: 512
1163parent: testsnaphot
1164...
1165
1166[testsnaphot]
1167memory: 512
1168swap: 512
1169snaptime: 1457170803
1170...
1171----
1172
69ab602f
TL
1173There are a few snapshot related properties like `parent` and `snaptime`. The
1174`parent` property is used to store the parent/child relationship between
1175snapshots. `snaptime` is the snapshot creation time stamp (Unix epoch).
c7bc47af
DM
1176
1177
1178[[pct_options]]
1179Options
1180~~~~~~~
1181
1182include::pct.conf.5-opts.adoc[]
1183
1184
2a11aa70
DM
1185Locks
1186-----
1187
69ab602f
TL
1188Container migrations, snapshots and backups (`vzdump`) set a lock to prevent
1189incompatible concurrent actions on the affected container. Sometimes you need
1190to remove such a lock manually (e.g., after a power failure).
2a11aa70 1191
14e97811
OB
1192----
1193# pct unlock <CTID>
1194----
2a11aa70 1195
69ab602f
TL
1196CAUTION: Only do this if you are sure the action which set the lock is no
1197longer running.
2a11aa70 1198
fe57a420 1199
0c6b782f 1200ifdef::manvolnum[]
3bd9d0cf
DM
1201
1202Files
1203------
1204
1205`/etc/pve/lxc/<CTID>.conf`::
1206
1207Configuration file for the container '<CTID>'.
1208
1209
0c6b782f
DM
1210include::pve-copyright.adoc[]
1211endif::manvolnum[]