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