]> git.ipfire.org Git - thirdparty/systemd.git/blame - man/systemd-nspawn.xml
tests: fix memory leak in test_strv_fnmatch (#3653)
[thirdparty/systemd.git] / man / systemd-nspawn.xml
CommitLineData
f757855e 1<?xml version='1.0'?> <!--*- Mode: nxml; nxml-child-indent: 2; indent-tabs-mode: nil -*-->
8f7a3c14 2<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
12b42c76 3 "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
8f7a3c14
LP
4
5<!--
6 This file is part of systemd.
7
8 Copyright 2010 Lennart Poettering
9
10 systemd is free software; you can redistribute it and/or modify it
5430f7f2
LP
11 under the terms of the GNU Lesser General Public License as published by
12 the Free Software Foundation; either version 2.1 of the License, or
8f7a3c14
LP
13 (at your option) any later version.
14
15 systemd is distributed in the hope that it will be useful, but
16 WITHOUT ANY WARRANTY; without even the implied warranty of
17 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
5430f7f2 18 Lesser General Public License for more details.
8f7a3c14 19
5430f7f2 20 You should have received a copy of the GNU Lesser General Public License
8f7a3c14
LP
21 along with systemd; If not, see <http://www.gnu.org/licenses/>.
22-->
23
dfdebb1b 24<refentry id="systemd-nspawn"
798d3a52
ZJS
25 xmlns:xi="http://www.w3.org/2001/XInclude">
26
27 <refentryinfo>
28 <title>systemd-nspawn</title>
29 <productname>systemd</productname>
30
31 <authorgroup>
32 <author>
33 <contrib>Developer</contrib>
34 <firstname>Lennart</firstname>
35 <surname>Poettering</surname>
36 <email>lennart@poettering.net</email>
37 </author>
38 </authorgroup>
39 </refentryinfo>
40
41 <refmeta>
42 <refentrytitle>systemd-nspawn</refentrytitle>
43 <manvolnum>1</manvolnum>
44 </refmeta>
45
46 <refnamediv>
47 <refname>systemd-nspawn</refname>
48 <refpurpose>Spawn a namespace container for debugging, testing and building</refpurpose>
49 </refnamediv>
50
51 <refsynopsisdiv>
52 <cmdsynopsis>
53 <command>systemd-nspawn</command>
54 <arg choice="opt" rep="repeat">OPTIONS</arg>
55 <arg choice="opt"><replaceable>COMMAND</replaceable>
56 <arg choice="opt" rep="repeat">ARGS</arg>
57 </arg>
58 </cmdsynopsis>
59 <cmdsynopsis>
60 <command>systemd-nspawn</command>
4447e799 61 <arg choice="plain">--boot</arg>
798d3a52
ZJS
62 <arg choice="opt" rep="repeat">OPTIONS</arg>
63 <arg choice="opt" rep="repeat">ARGS</arg>
64 </cmdsynopsis>
65 </refsynopsisdiv>
66
67 <refsect1>
68 <title>Description</title>
69
b09c0bba
LP
70 <para><command>systemd-nspawn</command> may be used to run a command or OS in a light-weight namespace
71 container. In many ways it is similar to <citerefentry
72 project='man-pages'><refentrytitle>chroot</refentrytitle><manvolnum>1</manvolnum></citerefentry>, but more powerful
73 since it fully virtualizes the file system hierarchy, as well as the process tree, the various IPC subsystems and
74 the host and domain name.</para>
75
76 <para>Like <citerefentry
77 project='man-pages'><refentrytitle>chroot</refentrytitle><manvolnum>1</manvolnum></citerefentry> the
78 <command>systemd-nspawn</command> command may be invoked on any directory tree containing an operating system tree,
79 using the <option>--directory=</option> command line option. By using the <option>--machine=</option> option an OS
80 tree is automatically searched in a couple of locations, most importantly in
81 <filename>/var/lib/machines</filename>, the suggested directory to place container images installed on the
82 system.</para>
83
84 <para>In contrast to <citerefentry
85 project='man-pages'><refentrytitle>chroot</refentrytitle><manvolnum>1</manvolnum></citerefentry> <command>systemd-nspawn</command>
86 may be used to boot full Linux-based operating systems in a container.</para>
87
88 <para><command>systemd-nspawn</command> limits access to various kernel interfaces in the container to read-only,
89 such as <filename>/sys</filename>, <filename>/proc/sys</filename> or <filename>/sys/fs/selinux</filename>. The
90 host's network interfaces and the system clock may not be changed from within the container. Device nodes may not
91 be created. The host system cannot be rebooted and kernel modules may not be loaded from within the
798d3a52
ZJS
92 container.</para>
93
b09c0bba
LP
94 <para>Use a tool like <citerefentry
95 project='mankier'><refentrytitle>dnf</refentrytitle><manvolnum>8</manvolnum></citerefentry>, <citerefentry
96 project='die-net'><refentrytitle>debootstrap</refentrytitle><manvolnum>8</manvolnum></citerefentry>, or
97 <citerefentry project='archlinux'><refentrytitle>pacman</refentrytitle><manvolnum>8</manvolnum></citerefentry> to
98 set up an OS directory tree suitable as file system hierarchy for <command>systemd-nspawn</command> containers. See
99 the Examples section below for details on suitable invocation of these commands.</para>
100
101 <para>As a safety check <command>systemd-nspawn</command> will verify the existence of
102 <filename>/usr/lib/os-release</filename> or <filename>/etc/os-release</filename> in the container tree before
103 starting the container (see
104 <citerefentry><refentrytitle>os-release</refentrytitle><manvolnum>5</manvolnum></citerefentry>). It might be
105 necessary to add this file to the container tree manually if the OS of the container is too old to contain this
798d3a52 106 file out-of-the-box.</para>
b09c0bba
LP
107
108 <para><command>systemd-nspawn</command> may be invoked directly from the interactive command line or run as system
109 service in the background. In this mode each container instance runs as its own service instance; a default
110 template unit file <filename>systemd-nspawn@.service</filename> is provided to make this easy, taking the container
111 name as instance identifier. Note that different default options apply when <command>systemd-nspawn</command> is
112 invoked by the template unit file than interactively on the commnd line. Most importanly the template unit file
113 makes use of the <option>--boot</option> which is not the default in case <command>systemd-nspawn</command> is
114 invoked from the interactive command line. Further differences with the defaults are documented dalong with the
115 various supported options below.</para>
116
117 <para>The <citerefentry><refentrytitle>machinectl</refentrytitle><manvolnum>1</manvolnum></citerefentry> tool may
118 be used to execute a number of operations on containers. In particular it provides easy-to-use commands to run
119 containers as system services using the <filename>systemd-nspawn@.service</filename> template unit
120 file.</para>
121
122 <para>Along with each container a settings file with the <filename>.nspawn</filename> suffix may exist, containing
123 additional settings to apply when running the container. See
124 <citerefentry><refentrytitle>systemd.nspawn</refentrytitle><manvolnum>5</manvolnum></citerefentry> for
125 details. Settings files override the default options used by the <filename>systemd-nspawn@.service</filename>
126 template unit file, making it usually unnecessary to alter this template file directly.</para>
127
128 <para>Note that <command>systemd-nspawn</command> will mount file systems private to the container to
129 <filename>/dev</filename>, <filename>/run</filename> and similar. These will not be visible outside of the
130 container, and their contents will be lost when the container exits.</para>
131
132 <para>Note that running two <command>systemd-nspawn</command> containers from the same directory tree will not make
133 processes in them see each other. The PID namespace separation of the two containers is complete and the containers
134 will share very few runtime objects except for the underlying file system. Use
135 <citerefentry><refentrytitle>machinectl</refentrytitle><manvolnum>1</manvolnum></citerefentry>'s
136 <command>login</command> or <command>shell</command> commands to request an additional login session in a running
137 container.</para>
138
139 <para><command>systemd-nspawn</command> implements the <ulink
140 url="http://www.freedesktop.org/wiki/Software/systemd/ContainerInterface">Container Interface</ulink>
141 specification.</para>
142
143 <para>While running, containers invoked with <command>systemd-nspawn</command> are registered with the
144 <citerefentry><refentrytitle>systemd-machined</refentrytitle><manvolnum>8</manvolnum></citerefentry> service that
145 keeps track of running containers, and provides programming interfaces to interact with them.</para>
798d3a52
ZJS
146 </refsect1>
147
148 <refsect1>
149 <title>Options</title>
150
151 <para>If option <option>-b</option> is specified, the arguments
152 are used as arguments for the init binary. Otherwise,
153 <replaceable>COMMAND</replaceable> specifies the program to launch
154 in the container, and the remaining arguments are used as
b09c0bba 155 arguments for this program. If <option>--boot</option> is not used and
ff9b60f3 156 no arguments are specified, a shell is launched in the
798d3a52
ZJS
157 container.</para>
158
159 <para>The following options are understood:</para>
160
161 <variablelist>
162 <varlistentry>
163 <term><option>-D</option></term>
164 <term><option>--directory=</option></term>
165
166 <listitem><para>Directory to use as file system root for the
167 container.</para>
168
169 <para>If neither <option>--directory=</option>, nor
170 <option>--image=</option> is specified the directory is
32b64cce
RM
171 determined by searching for a directory named the same as the
172 machine name specified with <option>--machine=</option>. See
173 <citerefentry><refentrytitle>machinectl</refentrytitle><manvolnum>1</manvolnum></citerefentry>
174 section "Files and Directories" for the precise search path.</para>
175
176 <para>If neither <option>--directory=</option>,
177 <option>--image=</option>, nor <option>--machine=</option>
178 are specified, the current directory will
179 be used. May not be specified together with
798d3a52
ZJS
180 <option>--image=</option>.</para></listitem>
181 </varlistentry>
182
183 <varlistentry>
184 <term><option>--template=</option></term>
185
186 <listitem><para>Directory or <literal>btrfs</literal>
187 subvolume to use as template for the container's root
188 directory. If this is specified and the container's root
189 directory (as configured by <option>--directory=</option>)
190 does not yet exist it is created as <literal>btrfs</literal>
191 subvolume and populated from this template tree. Ideally, the
192 specified template path refers to the root of a
193 <literal>btrfs</literal> subvolume, in which case a simple
194 copy-on-write snapshot is taken, and populating the root
195 directory is instant. If the specified template path does not
196 refer to the root of a <literal>btrfs</literal> subvolume (or
197 not even to a <literal>btrfs</literal> file system at all),
198 the tree is copied, which can be substantially more
199 time-consuming. Note that if this option is used the
200 container's root directory (in contrast to the template
201 directory!) must be located on a <literal>btrfs</literal> file
202 system, so that the <literal>btrfs</literal> subvolume may be
203 created. May not be specified together with
204 <option>--image=</option> or
3fe22bb4
LP
205 <option>--ephemeral</option>.</para>
206
207 <para>Note that this switch leaves host name, machine ID and
208 all other settings that could identify the instance
209 unmodified.</para></listitem>
798d3a52
ZJS
210 </varlistentry>
211
212 <varlistentry>
213 <term><option>-x</option></term>
214 <term><option>--ephemeral</option></term>
215
216 <listitem><para>If specified, the container is run with a
217 temporary <literal>btrfs</literal> snapshot of its root
218 directory (as configured with <option>--directory=</option>),
219 that is removed immediately when the container terminates.
220 This option is only supported if the root file system is
221 <literal>btrfs</literal>. May not be specified together with
222 <option>--image=</option> or
3fe22bb4
LP
223 <option>--template=</option>.</para>
224 <para>Note that this switch leaves host name, machine ID and
225 all other settings that could identify the instance
226 unmodified.</para></listitem>
798d3a52
ZJS
227 </varlistentry>
228
229 <varlistentry>
230 <term><option>-i</option></term>
231 <term><option>--image=</option></term>
232
233 <listitem><para>Disk image to mount the root directory for the
234 container from. Takes a path to a regular file or to a block
235 device node. The file or block device must contain
236 either:</para>
237
238 <itemizedlist>
239 <listitem><para>An MBR partition table with a single
240 partition of type 0x83 that is marked
241 bootable.</para></listitem>
242
243 <listitem><para>A GUID partition table (GPT) with a single
244 partition of type
245 0fc63daf-8483-4772-8e79-3d69d8477de4.</para></listitem>
246
247 <listitem><para>A GUID partition table (GPT) with a marked
248 root partition which is mounted as the root directory of the
249 container. Optionally, GPT images may contain a home and/or
250 a server data partition which are mounted to the appropriate
251 places in the container. All these partitions must be
252 identified by the partition types defined by the <ulink
253 url="http://www.freedesktop.org/wiki/Specifications/DiscoverablePartitionsSpec/">Discoverable
254 Partitions Specification</ulink>.</para></listitem>
255 </itemizedlist>
256
257 <para>Any other partitions, such as foreign partitions, swap
258 partitions or EFI system partitions are not mounted. May not
259 be specified together with <option>--directory=</option>,
260 <option>--template=</option> or
261 <option>--ephemeral</option>.</para></listitem>
262 </varlistentry>
263
7732f92b
LP
264 <varlistentry>
265 <term><option>-a</option></term>
266 <term><option>--as-pid2</option></term>
267
268 <listitem><para>Invoke the shell or specified program as process ID (PID) 2 instead of PID 1 (init). By
269 default, if neither this option nor <option>--boot</option> is used, the selected binary is run as process with
270 PID 1, a mode only suitable for programs that are aware of the special semantics that the process with PID 1
271 has on UNIX. For example, it needs to reap all processes reparented to it, and should implement
272 <command>sysvinit</command> compatible signal handling (specifically: it needs to reboot on SIGINT, reexecute
273 on SIGTERM, reload configuration on SIGHUP, and so on). With <option>--as-pid2</option> a minimal stub init
274 process is run as PID 1 and the selected binary is executed as PID 2 (and hence does not need to implement any
275 special semantics). The stub init process will reap processes as necessary and react appropriately to
276 signals. It is recommended to use this mode to invoke arbitrary commands in containers, unless they have been
277 modified to run correctly as PID 1. Or in other words: this switch should be used for pretty much all commands,
278 except when the command refers to an init or shell implementation, as these are generally capable of running
4447e799 279 correctly as PID 1. This option may not be combined with <option>--boot</option> or
7732f92b
LP
280 <option>--share-system</option>.</para>
281 </listitem>
282 </varlistentry>
283
798d3a52
ZJS
284 <varlistentry>
285 <term><option>-b</option></term>
286 <term><option>--boot</option></term>
287
7732f92b
LP
288 <listitem><para>Automatically search for an init binary and invoke it as PID 1, instead of a shell or a user
289 supplied program. If this option is used, arguments specified on the command line are used as arguments for the
290 init binary. This option may not be combined with <option>--as-pid2</option> or
291 <option>--share-system</option>.</para>
292
293 <para>The following table explains the different modes of invocation and relationship to
294 <option>--as-pid2</option> (see above):</para>
295
296 <table>
297 <title>Invocation Mode</title>
298 <tgroup cols='2' align='left' colsep='1' rowsep='1'>
299 <colspec colname="switch" />
300 <colspec colname="explanation" />
301 <thead>
302 <row>
303 <entry>Switch</entry>
304 <entry>Explanation</entry>
305 </row>
306 </thead>
307 <tbody>
308 <row>
309 <entry>Neither <option>--as-pid2</option> nor <option>--boot</option> specified</entry>
4447e799 310 <entry>The passed parameters are interpreted as the command line, which is executed as PID 1 in the container.</entry>
7732f92b
LP
311 </row>
312
313 <row>
314 <entry><option>--as-pid2</option> specified</entry>
4447e799 315 <entry>The passed parameters are interpreted as the command line, which is executed as PID 2 in the container. A stub init process is run as PID 1.</entry>
7732f92b
LP
316 </row>
317
318 <row>
319 <entry><option>--boot</option> specified</entry>
320 <entry>An init binary as automatically searched and run as PID 1 in the container. The passed parameters are used as invocation parameters for this process.</entry>
321 </row>
322
323 </tbody>
324 </tgroup>
325 </table>
b09c0bba
LP
326
327 <para>Note that <option>--boot</option> is the default mode of operation if the
328 <filename>systemd-nspawn@.service</filename> template unit file is used.</para>
7732f92b 329 </listitem>
798d3a52
ZJS
330 </varlistentry>
331
5f932eb9
LP
332 <varlistentry>
333 <term><option>--chdir=</option></term>
334
335 <listitem><para>Change to the specified working directory before invoking the process in the container. Expects
336 an absolute path in the container's file system namespace.</para></listitem>
337 </varlistentry>
338
798d3a52
ZJS
339 <varlistentry>
340 <term><option>-u</option></term>
341 <term><option>--user=</option></term>
342
343 <listitem><para>After transitioning into the container, change
344 to the specified user-defined in the container's user
345 database. Like all other systemd-nspawn features, this is not
346 a security feature and provides protection against accidental
347 destructive operations only.</para></listitem>
348 </varlistentry>
349
350 <varlistentry>
351 <term><option>-M</option></term>
352 <term><option>--machine=</option></term>
353
354 <listitem><para>Sets the machine name for this container. This
355 name may be used to identify this container during its runtime
356 (for example in tools like
357 <citerefentry><refentrytitle>machinectl</refentrytitle><manvolnum>1</manvolnum></citerefentry>
358 and similar), and is used to initialize the container's
359 hostname (which the container can choose to override,
360 however). If not specified, the last component of the root
361 directory path of the container is used, possibly suffixed
362 with a random identifier in case <option>--ephemeral</option>
363 mode is selected. If the root directory selected is the host's
364 root directory the host's hostname is used as default
365 instead.</para></listitem>
366 </varlistentry>
367
368 <varlistentry>
369 <term><option>--uuid=</option></term>
370
371 <listitem><para>Set the specified UUID for the container. The
372 init system will initialize
373 <filename>/etc/machine-id</filename> from this if this file is
e01ff70a
MS
374 not set yet. Note that this option takes effect only if
375 <filename>/etc/machine-id</filename> in the container is
376 unpopulated.</para></listitem>
798d3a52
ZJS
377 </varlistentry>
378
379 <varlistentry>
380 <term><option>--slice=</option></term>
381
382 <listitem><para>Make the container part of the specified
383 slice, instead of the default
f36933fe
LP
384 <filename>machine.slice</filename>. This is only applies if
385 the machine is run in its own scope unit, i.e. if
386 <option>--keep-unit</option> is not used.</para>
387 </listitem>
388 </varlistentry>
389
390 <varlistentry>
391 <term><option>--property=</option></term>
392
393 <listitem><para>Set a unit property on the scope unit to
394 register for the machine. This only applies if the machine is
395 run in its own scope unit, i.e. if
396 <option>--keep-unit</option> is not used. Takes unit property
397 assignments in the same format as <command>systemctl
398 set-property</command>. This is useful to set memory limits
399 and similar for machines.</para>
798d3a52
ZJS
400 </listitem>
401 </varlistentry>
402
03cfe0d5
LP
403 <varlistentry>
404 <term><option>--private-users=</option></term>
405
d2e5535f
LP
406 <listitem><para>Controls user namespacing. If enabled, the container will run with its own private set of UNIX
407 user and group ids (UIDs and GIDs). This involves mapping the private UIDs/GIDs used in the container (starting
408 with the container's root user 0 and up) to a range of UIDs/GIDs on the host that are not used for other
409 purposes (usually in the range beyond the host's UID/GID 65536). The parameter may be specified as follows:</para>
410
411 <orderedlist>
412 <listitem><para>The value <literal>no</literal> turns off user namespacing. This is the default.</para></listitem>
413
414 <listitem><para>The value <literal>yes</literal> (or the omission of a parameter) turns on user
415 namespacing. The UID/GID range to use is determined automatically from the file ownership of the root
416 directory of the container's directory tree. To use this option, make sure to prepare the directory tree in
417 advance, and ensure that all files and directories in it are owned by UIDs/GIDs in the range you'd like to
418 use. Also, make sure that used file ACLs exclusively reference UIDs/GIDs in the appropriate range. If this
419 mode is used the number of UIDs/GIDs assigned to the container for use is 65536, and the UID/GID of the
420 root directory must be a multiple of 65536.</para></listitem>
421
422 <listitem><para>The value "pick" turns on user namespacing. In this case the UID/GID range is automatically
423 chosen. As first step, the file owner of the root directory of the container's directory tree is read, and it
424 is checked that it is currently not used by the system otherwise (in particular, that no other container is
425 using it). If this check is successful, the UID/GID range determined this way is used, similar to the
426 behaviour if "yes" is specified. If the check is not successful (and thus the UID/GID range indicated in the
427 root directory's file owner is already used elsewhere) a new – currently unused – UID/GID range of 65536
428 UIDs/GIDs is randomly chosen between the host UID/GIDs of 524288 and 1878982656, always starting at a
429 multiple of 65536. This setting implies <option>--private-users-chown</option> (see below), which has the
430 effect that the files and directories in the container's directory tree will be owned by the appropriate
431 users of the range picked. Using this option makes user namespace behaviour fully automatic. Note that the
432 first invocation of a previously unused container image might result in picking a new UID/GID range for it,
433 and thus in the (possibly expensive) file ownership adjustment operation. However, subsequent invocations of
434 the container will be cheap (unless of course the picked UID/GID range is assigned to a different use by
435 then).</para></listitem>
436
437 <listitem><para>Finally if one or two colon-separated numeric parameters are specified, user namespacing is
438 turned on, too. The first parameter specifies the first host UID/GID to assign to the container, the second
439 parameter specifies the number of host UIDs/GIDs to assign to the container. If the second parameter is
440 omitted, 65536 UIDs/GIDs are assigned.</para></listitem>
441 </orderedlist>
442
443 <para>It is recommended to assign at least 65536 UIDs/GIDs to each container, so that the usable UID/GID range in the
444 container covers 16 bit. For best security, do not assign overlapping UID/GID ranges to multiple containers. It is
445 hence a good idea to use the upper 16 bit of the host 32-bit UIDs/GIDs as container identifier, while the lower 16
446 bit encode the container UID/GID used. This is in fact the behaviour enforced by the
447 <option>--private-users=pick</option> option.</para>
448
449 <para>When user namespaces are used, the GID range assigned to each container is always chosen identical to the
450 UID range.</para>
451
452 <para>In most cases, using <option>--private-users=pick</option> is the recommended option as it enhances
453 container security massively and operates fully automatically in most cases.</para>
454
455 <para>Note that the picked UID/GID range is not written to <filename>/etc/passwd</filename> or
456 <filename>/etc/group</filename>. In fact, the allocation of the range is not stored persistently anywhere,
457 except in the file ownership of the files and directories of the container.</para></listitem>
03cfe0d5
LP
458 </varlistentry>
459
d2e5535f
LP
460 <varlistentry>
461 <term><option>-U</option></term>
462
ccabee0d
LP
463 <listitem><para>If the kernel supports the user namespaces feature, equivalent to
464 <option>--private-users=pick</option>, otherwise equivalent to
b09c0bba
LP
465 <option>--private-users=no</option>.</para>
466
467 <para>Note that <option>-U</option> is the default if the <filename>systemd-nspawn@.service</filename> template unit
468 file is used.</para></listitem>
d2e5535f
LP
469 </varlistentry>
470
471 <varlistentry>
472 <term><option>--private-users-chown</option></term>
473
474 <listitem><para>If specified, all files and directories in the container's directory tree will adjusted so that
475 they are owned to the appropriate UIDs/GIDs selected for the container (see above). This operation is
476 potentially expensive, as it involves descending and iterating through the full directory tree of the
477 container. Besides actual file ownership, file ACLs are adjusted as well.</para>
478
479 <para>This option is implied if <option>--private-users=pick</option> is used. This option has no effect if
480 user namespacing is not used.</para></listitem>
481 </varlistentry>
03cfe0d5 482
798d3a52
ZJS
483 <varlistentry>
484 <term><option>--private-network</option></term>
485
486 <listitem><para>Disconnect networking of the container from
487 the host. This makes all network interfaces unavailable in the
488 container, with the exception of the loopback device and those
489 specified with <option>--network-interface=</option> and
490 configured with <option>--network-veth</option>. If this
491 option is specified, the CAP_NET_ADMIN capability will be
492 added to the set of capabilities the container retains. The
493 latter may be disabled by using
494 <option>--drop-capability=</option>.</para></listitem>
495 </varlistentry>
496
497 <varlistentry>
498 <term><option>--network-interface=</option></term>
499
500 <listitem><para>Assign the specified network interface to the
501 container. This will remove the specified interface from the
502 calling namespace and place it in the container. When the
503 container terminates, it is moved back to the host namespace.
504 Note that <option>--network-interface=</option> implies
505 <option>--private-network</option>. This option may be used
506 more than once to add multiple network interfaces to the
507 container.</para></listitem>
508 </varlistentry>
509
510 <varlistentry>
511 <term><option>--network-macvlan=</option></term>
512
513 <listitem><para>Create a <literal>macvlan</literal> interface
514 of the specified Ethernet network interface and add it to the
515 container. A <literal>macvlan</literal> interface is a virtual
516 interface that adds a second MAC address to an existing
517 physical Ethernet link. The interface in the container will be
518 named after the interface on the host, prefixed with
519 <literal>mv-</literal>. Note that
520 <option>--network-macvlan=</option> implies
521 <option>--private-network</option>. This option may be used
522 more than once to add multiple network interfaces to the
523 container.</para></listitem>
524 </varlistentry>
525
526 <varlistentry>
527 <term><option>--network-ipvlan=</option></term>
528
529 <listitem><para>Create an <literal>ipvlan</literal> interface
530 of the specified Ethernet network interface and add it to the
531 container. An <literal>ipvlan</literal> interface is a virtual
532 interface, similar to a <literal>macvlan</literal> interface,
533 which uses the same MAC address as the underlying interface.
534 The interface in the container will be named after the
535 interface on the host, prefixed with <literal>iv-</literal>.
536 Note that <option>--network-ipvlan=</option> implies
537 <option>--private-network</option>. This option may be used
538 more than once to add multiple network interfaces to the
539 container.</para></listitem>
540 </varlistentry>
541
542 <varlistentry>
543 <term><option>-n</option></term>
544 <term><option>--network-veth</option></term>
545
5e7423ff
LP
546 <listitem><para>Create a virtual Ethernet link (<literal>veth</literal>) between host and container. The host
547 side of the Ethernet link will be available as a network interface named after the container's name (as
548 specified with <option>--machine=</option>), prefixed with <literal>ve-</literal>. The container side of the
549 Ethernet link will be named <literal>host0</literal>. The <option>--network-veth</option> option implies
550 <option>--private-network</option>.</para>
551
552 <para>Note that
553 <citerefentry><refentrytitle>systemd-networkd.service</refentrytitle><manvolnum>8</manvolnum></citerefentry>
554 includes by default a network file <filename>/usr/lib/systemd/network/80-container-ve.network</filename>
555 matching the host-side interfaces created this way, which contains settings to enable automatic address
556 provisioning on the created virtual link via DHCP, as well as automatic IP routing onto the host's external
557 network interfaces. It also contains <filename>/usr/lib/systemd/network/80-container-host0.network</filename>
558 matching the container-side interface created this way, containing settings to enable client side address
559 assignment via DHCP. In case <filename>systemd-networkd</filename> is running on both the host and inside the
560 container, automatic IP communication from the container to the host is thus available, with further
561 connectivity to the external network.</para>
b09c0bba
LP
562
563 <para>Note that <option>--network-veth</option> is the default if the
564 <filename>systemd-nspawn@.service</filename> template unit file is used.</para>
5e7423ff 565 </listitem>
798d3a52
ZJS
566 </varlistentry>
567
f6d6bad1
LP
568 <varlistentry>
569 <term><option>--network-veth-extra=</option></term>
570
571 <listitem><para>Adds an additional virtual Ethernet link
572 between host and container. Takes a colon-separated pair of
573 host interface name and container interface name. The latter
574 may be omitted in which case the container and host sides will
575 be assigned the same name. This switch is independent of
ccddd104 576 <option>--network-veth</option>, and — in contrast — may be
f6d6bad1
LP
577 used multiple times, and allows configuration of the network
578 interface names. Note that <option>--network-bridge=</option>
579 has no effect on interfaces created with
580 <option>--network-veth-extra=</option>.</para></listitem>
581 </varlistentry>
582
798d3a52
ZJS
583 <varlistentry>
584 <term><option>--network-bridge=</option></term>
585
5e7423ff
LP
586 <listitem><para>Adds the host side of the Ethernet link created with <option>--network-veth</option> to the
587 specified Ethernet bridge interface. Expects a valid network interface name of a bridge device as
588 argument. Note that <option>--network-bridge=</option> implies <option>--network-veth</option>. If this option
589 is used, the host side of the Ethernet link will use the <literal>vb-</literal> prefix instead of
798d3a52
ZJS
590 <literal>ve-</literal>.</para></listitem>
591 </varlistentry>
592
938d2579
LP
593 <varlistentry>
594 <term><option>--network-zone=</option></term>
595
596 <listitem><para>Creates a virtual Ethernet link (<literal>veth</literal>) to the container and adds it to an
597 automatically managed Ethernet bridge interface. The bridge interface is named after the passed argument,
598 prefixed with <literal>vz-</literal>. The bridge interface is automatically created when the first container
599 configured for its name is started, and is automatically removed when the last container configured for its
600 name exits. Hence, each bridge interface configured this way exists only as long as there's at least one
601 container referencing it running. This option is very similar to <option>--network-bridge=</option>, besides
602 this automatic creation/removal of the bridge device.</para>
603
604 <para>This setting makes it easy to place multiple related containers on a common, virtual Ethernet-based
605 broadcast domain, here called a "zone". Each container may only be part of one zone, but each zone may contain
606 any number of containers. Each zone is referenced by its name. Names may be chosen freely (as long as they form
607 valid network interface names when prefixed with <literal>vz-</literal>), and it is sufficient to pass the same
608 name to the <option>--network-zones=</option> switch of the various concurrently running containers to join
609 them in one zone.</para>
610
611 <para>Note that
612 <citerefentry><refentrytitle>systemd-networkd.service</refentrytitle><manvolnum>8</manvolnum></citerefentry>
613 includes by default a network file <filename>/usr/lib/systemd/network/80-container-vz.network</filename>
614 matching the bridge interfaces created this way, which contains settings to enable automatic address
615 provisioning on the created virtual network via DHCP, as well as automatic IP routing onto the host's external
616 network interfaces. Using <option>--network-zone=</option> is hence in most cases fully automatic and
617 sufficient to connect multiple local containers in a joined broadcast domain to the host, with further
618 connectivity to the external network.</para>
619 </listitem>
620 </varlistentry>
621
798d3a52
ZJS
622 <varlistentry>
623 <term><option>-p</option></term>
624 <term><option>--port=</option></term>
625
626 <listitem><para>If private networking is enabled, maps an IP
627 port on the host onto an IP port on the container. Takes a
628 protocol specifier (either <literal>tcp</literal> or
629 <literal>udp</literal>), separated by a colon from a host port
630 number in the range 1 to 65535, separated by a colon from a
631 container port number in the range from 1 to 65535. The
632 protocol specifier and its separating colon may be omitted, in
633 which case <literal>tcp</literal> is assumed. The container
7c918141 634 port number and its colon may be omitted, in which case the
798d3a52 635 same port as the host port is implied. This option is only
a8eaaee7 636 supported if private networking is used, such as with
938d2579 637 <option>--network-veth</option>, <option>--network-zone=</option>
798d3a52
ZJS
638 <option>--network-bridge=</option>.</para></listitem>
639 </varlistentry>
640
641 <varlistentry>
642 <term><option>-Z</option></term>
643 <term><option>--selinux-context=</option></term>
644
645 <listitem><para>Sets the SELinux security context to be used
646 to label processes in the container.</para>
647 </listitem>
648 </varlistentry>
649
650 <varlistentry>
651 <term><option>-L</option></term>
652 <term><option>--selinux-apifs-context=</option></term>
653
654 <listitem><para>Sets the SELinux security context to be used
655 to label files in the virtual API file systems in the
656 container.</para>
657 </listitem>
658 </varlistentry>
659
660 <varlistentry>
661 <term><option>--capability=</option></term>
662
663 <listitem><para>List one or more additional capabilities to
664 grant the container. Takes a comma-separated list of
665 capability names, see
666 <citerefentry project='man-pages'><refentrytitle>capabilities</refentrytitle><manvolnum>7</manvolnum></citerefentry>
667 for more information. Note that the following capabilities
668 will be granted in any way: CAP_CHOWN, CAP_DAC_OVERRIDE,
669 CAP_DAC_READ_SEARCH, CAP_FOWNER, CAP_FSETID, CAP_IPC_OWNER,
670 CAP_KILL, CAP_LEASE, CAP_LINUX_IMMUTABLE,
671 CAP_NET_BIND_SERVICE, CAP_NET_BROADCAST, CAP_NET_RAW,
672 CAP_SETGID, CAP_SETFCAP, CAP_SETPCAP, CAP_SETUID,
673 CAP_SYS_ADMIN, CAP_SYS_CHROOT, CAP_SYS_NICE, CAP_SYS_PTRACE,
674 CAP_SYS_TTY_CONFIG, CAP_SYS_RESOURCE, CAP_SYS_BOOT,
675 CAP_AUDIT_WRITE, CAP_AUDIT_CONTROL. Also CAP_NET_ADMIN is
676 retained if <option>--private-network</option> is specified.
677 If the special value <literal>all</literal> is passed, all
678 capabilities are retained.</para></listitem>
679 </varlistentry>
680
681 <varlistentry>
682 <term><option>--drop-capability=</option></term>
683
684 <listitem><para>Specify one or more additional capabilities to
685 drop for the container. This allows running the container with
686 fewer capabilities than the default (see
687 above).</para></listitem>
688 </varlistentry>
689
c6c8f6e2
LP
690 <varlistentry>
691 <term><option>--kill-signal=</option></term>
692
693 <listitem><para>Specify the process signal to send to the
694 container's PID 1 when nspawn itself receives SIGTERM, in
695 order to trigger an orderly shutdown of the
696 container. Defaults to SIGRTMIN+3 if <option>--boot</option>
697 is used (on systemd-compatible init systems SIGRTMIN+3
b3969f73
PA
698 triggers an orderly shutdown). For a list of valid signals, see
699 <citerefentry project='man-pages'><refentrytitle>signal</refentrytitle><manvolnum>7</manvolnum></citerefentry>.</para></listitem>
c6c8f6e2
LP
700 </varlistentry>
701
798d3a52
ZJS
702 <varlistentry>
703 <term><option>--link-journal=</option></term>
704
705 <listitem><para>Control whether the container's journal shall
706 be made visible to the host system. If enabled, allows viewing
707 the container's journal files from the host (but not vice
708 versa). Takes one of <literal>no</literal>,
709 <literal>host</literal>, <literal>try-host</literal>,
710 <literal>guest</literal>, <literal>try-guest</literal>,
711 <literal>auto</literal>. If <literal>no</literal>, the journal
712 is not linked. If <literal>host</literal>, the journal files
713 are stored on the host file system (beneath
714 <filename>/var/log/journal/<replaceable>machine-id</replaceable></filename>)
715 and the subdirectory is bind-mounted into the container at the
716 same location. If <literal>guest</literal>, the journal files
717 are stored on the guest file system (beneath
718 <filename>/var/log/journal/<replaceable>machine-id</replaceable></filename>)
719 and the subdirectory is symlinked into the host at the same
720 location. <literal>try-host</literal> and
721 <literal>try-guest</literal> do the same but do not fail if
722 the host does not have persistent journalling enabled. If
723 <literal>auto</literal> (the default), and the right
724 subdirectory of <filename>/var/log/journal</filename> exists,
725 it will be bind mounted into the container. If the
726 subdirectory does not exist, no linking is performed.
727 Effectively, booting a container once with
728 <literal>guest</literal> or <literal>host</literal> will link
729 the journal persistently if further on the default of
b09c0bba
LP
730 <literal>auto</literal> is used.</para>
731
732 <para>Note that <option>--link-journal=try-guest</option> is the default if the
733 <filename>systemd-nspawn@.service</filename> template unit file is used.</para></listitem>
798d3a52
ZJS
734 </varlistentry>
735
736 <varlistentry>
737 <term><option>-j</option></term>
738
739 <listitem><para>Equivalent to
740 <option>--link-journal=try-guest</option>.</para></listitem>
741 </varlistentry>
742
743 <varlistentry>
744 <term><option>--read-only</option></term>
745
746 <listitem><para>Mount the root file system read-only for the
747 container.</para></listitem>
748 </varlistentry>
749
750 <varlistentry>
751 <term><option>--bind=</option></term>
752 <term><option>--bind-ro=</option></term>
753
754 <listitem><para>Bind mount a file or directory from the host
b938cb90 755 into the container. Takes one of: a path argument — in which
798d3a52 756 case the specified path will be mounted from the host to the
b938cb90
JE
757 same path in the container —, or a colon-separated pair of
758 paths — in which case the first specified path is the source
798d3a52 759 in the host, and the second path is the destination in the
b938cb90
JE
760 container —, or a colon-separated triple of source path,
761 destination path and mount options. Mount options are
762 comma-separated and currently, only "rbind" and "norbind"
763 are allowed. Defaults to "rbind". Backslash escapes are interpreted, so
8ef24e7a
RM
764 <literal>\:</literal> may be used to embed colons in either path.
765 This option may be specified multiple times for
64b282ef
LP
766 creating multiple independent bind mount points. The
767 <option>--bind-ro=</option> option creates read-only bind
768 mounts.</para></listitem>
798d3a52
ZJS
769 </varlistentry>
770
771 <varlistentry>
772 <term><option>--tmpfs=</option></term>
773
774 <listitem><para>Mount a tmpfs file system into the container.
775 Takes a single absolute path argument that specifies where to
776 mount the tmpfs instance to (in which case the directory
777 access mode will be chosen as 0755, owned by root/root), or
778 optionally a colon-separated pair of path and mount option
b938cb90 779 string that is used for mounting (in which case the kernel
798d3a52
ZJS
780 default for access mode and owner will be chosen, unless
781 otherwise specified). This option is particularly useful for
782 mounting directories such as <filename>/var</filename> as
783 tmpfs, to allow state-less systems, in particular when
ffcd3e89 784 combined with <option>--read-only</option>.
b938cb90 785 Backslash escapes are interpreted in the path, so
ffcd3e89
RM
786 <literal>\:</literal> may be used to embed colons in the path.
787 </para></listitem>
798d3a52
ZJS
788 </varlistentry>
789
5a8af538
LP
790 <varlistentry>
791 <term><option>--overlay=</option></term>
792 <term><option>--overlay-ro=</option></term>
793
794 <listitem><para>Combine multiple directory trees into one
795 overlay file system and mount it into the container. Takes a
796 list of colon-separated paths to the directory trees to
797 combine and the destination mount point.</para>
798
2eadf91c
RM
799 <para>Backslash escapes are interpreted in the paths, so
800 <literal>\:</literal> may be used to embed colons in the paths.
801 </para>
802
5a8af538
LP
803 <para>If three or more paths are specified, then the last
804 specified path is the destination mount point in the
805 container, all paths specified before refer to directory trees
806 on the host and are combined in the specified order into one
807 overlay file system. The left-most path is hence the lowest
808 directory tree, the second-to-last path the highest directory
809 tree in the stacking order. If <option>--overlay-ro=</option>
b938cb90 810 is used instead of <option>--overlay=</option>, a read-only
5a8af538 811 overlay file system is created. If a writable overlay file
b938cb90 812 system is created, all changes made to it are written to the
5a8af538
LP
813 highest directory tree in the stacking order, i.e. the
814 second-to-last specified.</para>
815
816 <para>If only two paths are specified, then the second
817 specified path is used both as the top-level directory tree in
818 the stacking order as seen from the host, as well as the mount
819 point for the overlay file system in the container. At least
820 two paths have to be specified.</para>
821
822 <para>For details about overlay file systems, see <ulink
823 url="https://www.kernel.org/doc/Documentation/filesystems/overlayfs.txt">overlayfs.txt</ulink>. Note
824 that the semantics of overlay file systems are substantially
825 different from normal file systems, in particular regarding
826 reported device and inode information. Device and inode
827 information may change for a file while it is being written
828 to, and processes might see out-of-date versions of files at
829 times. Note that this switch automatically derives the
830 <literal>workdir=</literal> mount option for the overlay file
831 system from the top-level directory tree, making it a sibling
832 of it. It is hence essential that the top-level directory tree
833 is not a mount point itself (since the working directory must
834 be on the same file system as the top-most directory
835 tree). Also note that the <literal>lowerdir=</literal> mount
836 option receives the paths to stack in the opposite order of
837 this switch.</para></listitem>
838 </varlistentry>
839
798d3a52 840 <varlistentry>
a5f1cb3b
ZJS
841 <term><option>-E <replaceable>NAME</replaceable>=<replaceable>VALUE</replaceable></option></term>
842 <term><option>--setenv=<replaceable>NAME</replaceable>=<replaceable>VALUE</replaceable></option></term>
798d3a52
ZJS
843
844 <listitem><para>Specifies an environment variable assignment
845 to pass to the init process in the container, in the format
846 <literal>NAME=VALUE</literal>. This may be used to override
847 the default variables or to set additional variables. This
848 parameter may be used more than once.</para></listitem>
849 </varlistentry>
850
851 <varlistentry>
852 <term><option>--share-system</option></term>
853
854 <listitem><para>Allows the container to share certain system
855 facilities with the host. More specifically, this turns off
856 PID namespacing, UTS namespacing and IPC namespacing, and thus
857 allows the guest to see and interact more easily with
858 processes outside of the container. Note that using this
859 option makes it impossible to start up a full Operating System
860 in the container, as an init system cannot operate in this
861 mode. It is only useful to run specific programs or
862 applications this way, without involving an init system in the
863 container. This option implies <option>--register=no</option>.
864 This option may not be combined with
865 <option>--boot</option>.</para></listitem>
866 </varlistentry>
867
868 <varlistentry>
869 <term><option>--register=</option></term>
870
871 <listitem><para>Controls whether the container is registered
872 with
873 <citerefentry><refentrytitle>systemd-machined</refentrytitle><manvolnum>8</manvolnum></citerefentry>.
a8eaaee7 874 Takes a boolean argument, which defaults to <literal>yes</literal>.
798d3a52
ZJS
875 This option should be enabled when the container runs a full
876 Operating System (more specifically: an init system), and is
877 useful to ensure that the container is accessible via
878 <citerefentry><refentrytitle>machinectl</refentrytitle><manvolnum>1</manvolnum></citerefentry>
879 and shown by tools such as
880 <citerefentry project='man-pages'><refentrytitle>ps</refentrytitle><manvolnum>1</manvolnum></citerefentry>.
881 If the container does not run an init system, it is
882 recommended to set this option to <literal>no</literal>. Note
883 that <option>--share-system</option> implies
884 <option>--register=no</option>. </para></listitem>
885 </varlistentry>
886
887 <varlistentry>
888 <term><option>--keep-unit</option></term>
889
890 <listitem><para>Instead of creating a transient scope unit to
891 run the container in, simply register the service or scope
892 unit <command>systemd-nspawn</command> has been invoked in
893 with
894 <citerefentry><refentrytitle>systemd-machined</refentrytitle><manvolnum>8</manvolnum></citerefentry>.
895 This has no effect if <option>--register=no</option> is used.
896 This switch should be used if
897 <command>systemd-nspawn</command> is invoked from within a
898 service unit, and the service unit's sole purpose is to run a
899 single <command>systemd-nspawn</command> container. This
900 option is not available if run from a user
901 session.</para></listitem>
902 </varlistentry>
903
904 <varlistentry>
905 <term><option>--personality=</option></term>
906
907 <listitem><para>Control the architecture ("personality")
908 reported by
3ba3a79d 909 <citerefentry project='man-pages'><refentrytitle>uname</refentrytitle><manvolnum>2</manvolnum></citerefentry>
798d3a52
ZJS
910 in the container. Currently, only <literal>x86</literal> and
911 <literal>x86-64</literal> are supported. This is useful when
912 running a 32-bit container on a 64-bit host. If this setting
913 is not used, the personality reported in the container is the
914 same as the one reported on the host.</para></listitem>
915 </varlistentry>
916
917 <varlistentry>
918 <term><option>-q</option></term>
919 <term><option>--quiet</option></term>
920
921 <listitem><para>Turns off any status output by the tool
922 itself. When this switch is used, the only output from nspawn
923 will be the console output of the container OS
924 itself.</para></listitem>
925 </varlistentry>
926
927 <varlistentry>
f757855e
LP
928 <term><option>--volatile</option></term>
929 <term><option>--volatile=</option><replaceable>MODE</replaceable></term>
798d3a52
ZJS
930
931 <listitem><para>Boots the container in volatile mode. When no
932 mode parameter is passed or when mode is specified as
b938cb90 933 <option>yes</option>, full volatile mode is enabled. This
a8eaaee7 934 means the root directory is mounted as a mostly unpopulated
798d3a52 935 <literal>tmpfs</literal> instance, and
cd72d204
JE
936 <filename>/usr</filename> from the OS tree is mounted into it
937 in read-only mode (the system thus starts up with read-only OS
798d3a52
ZJS
938 resources, but pristine state and configuration, any changes
939 to the either are lost on shutdown). When the mode parameter
b938cb90 940 is specified as <option>state</option>, the OS tree is
798d3a52 941 mounted read-only, but <filename>/var</filename> is mounted as
a8eaaee7 942 a <literal>tmpfs</literal> instance into it (the system thus
798d3a52 943 starts up with read-only OS resources and configuration, but
a8eaaee7 944 pristine state, and any changes to the latter are lost on
798d3a52 945 shutdown). When the mode parameter is specified as
b938cb90 946 <option>no</option> (the default), the whole OS tree is made
798d3a52
ZJS
947 available writable.</para>
948
f757855e
LP
949 <para>Note that setting this to <option>yes</option> or
950 <option>state</option> will only work correctly with
798d3a52
ZJS
951 operating systems in the container that can boot up with only
952 <filename>/usr</filename> mounted, and are able to populate
953 <filename>/var</filename> automatically, as
954 needed.</para></listitem>
955 </varlistentry>
956
f757855e
LP
957 <varlistentry>
958 <term><option>--settings=</option><replaceable>MODE</replaceable></term>
959
960 <listitem><para>Controls whether
961 <command>systemd-nspawn</command> shall search for and use
962 additional per-container settings from
963 <filename>.nspawn</filename> files. Takes a boolean or the
964 special values <option>override</option> or
965 <option>trusted</option>.</para>
966
b938cb90 967 <para>If enabled (the default), a settings file named after the
f757855e
LP
968 machine (as specified with the <option>--machine=</option>
969 setting, or derived from the directory or image file name)
970 with the suffix <filename>.nspawn</filename> is searched in
971 <filename>/etc/systemd/nspawn/</filename> and
972 <filename>/run/systemd/nspawn/</filename>. If it is found
973 there, its settings are read and used. If it is not found
b938cb90 974 there, it is subsequently searched in the same directory as the
f757855e 975 image file or in the immediate parent of the root directory of
b938cb90 976 the container. In this case, if the file is found, its settings
f757855e 977 will be also read and used, but potentially unsafe settings
b938cb90 978 are ignored. Note that in both these cases, settings on the
4f76ef04 979 command line take precedence over the corresponding settings
f757855e
LP
980 from loaded <filename>.nspawn</filename> files, if both are
981 specified. Unsafe settings are considered all settings that
982 elevate the container's privileges or grant access to
983 additional resources such as files or directories of the
984 host. For details about the format and contents of
b938cb90 985 <filename>.nspawn</filename> files, consult
f757855e
LP
986 <citerefentry><refentrytitle>systemd.nspawn</refentrytitle><manvolnum>5</manvolnum></citerefentry>.</para>
987
b938cb90
JE
988 <para>If this option is set to <option>override</option>, the
989 file is searched, read and used the same way, however, the order of
f757855e
LP
990 precedence is reversed: settings read from the
991 <filename>.nspawn</filename> file will take precedence over
992 the corresponding command line options, if both are
993 specified.</para>
994
b938cb90 995 <para>If this option is set to <option>trusted</option>, the
f757855e 996 file is searched, read and used the same way, but regardless
a8eaaee7 997 of being found in <filename>/etc/systemd/nspawn/</filename>,
f757855e
LP
998 <filename>/run/systemd/nspawn/</filename> or next to the image
999 file or container root directory, all settings will take
b938cb90 1000 effect, however, command line arguments still take precedence
f757855e
LP
1001 over corresponding settings.</para>
1002
b938cb90 1003 <para>If disabled, no <filename>.nspawn</filename> file is read
f757855e
LP
1004 and no settings except the ones on the command line are in
1005 effect.</para></listitem>
1006 </varlistentry>
1007
9c1e04d0 1008 <varlistentry>
b09c0bba 1009 <term><option>--notify-ready=</option></term>
9c1e04d0
AP
1010
1011 <listitem><para>Configures support for notifications from the container's init process.
b09c0bba 1012 <option>--notify-ready=</option> takes a boolean (<option>no</option> and <option>yes</option>).
9c1e04d0
AP
1013 With option <option>no</option> systemd-nspawn notifies systemd
1014 with a <literal>READY=1</literal> message when the init process is created.
1015 With option <option>yes</option> systemd-nspawn waits for the
1016 <literal>READY=1</literal> message from the init process in the container
1017 before sending its own to systemd. For more details about notifications
1018 see <citerefentry><refentrytitle>sd_notify</refentrytitle><manvolnum>3</manvolnum></citerefentry>).</para></listitem>
1019 </varlistentry>
1020
798d3a52
ZJS
1021 <xi:include href="standard-options.xml" xpointer="help" />
1022 <xi:include href="standard-options.xml" xpointer="version" />
1023 </variablelist>
1024
1025 </refsect1>
1026
1027 <refsect1>
1028 <title>Examples</title>
1029
1030 <example>
1031 <title>Download a Fedora image and start a shell in it</title>
1032
1033 <programlisting># machinectl pull-raw --verify=no http://ftp.halifax.rwth-aachen.de/fedora/linux/releases/21/Cloud/Images/x86_64/Fedora-Cloud-Base-20141203-21.x86_64.raw.xz
e0ea94c1
LP
1034# systemd-nspawn -M Fedora-Cloud-Base-20141203-21</programlisting>
1035
798d3a52
ZJS
1036 <para>This downloads an image using
1037 <citerefentry><refentrytitle>machinectl</refentrytitle><manvolnum>1</manvolnum></citerefentry>
1038 and opens a shell in it.</para>
1039 </example>
e0ea94c1 1040
798d3a52
ZJS
1041 <example>
1042 <title>Build and boot a minimal Fedora distribution in a container</title>
8f7a3c14 1043
09c76ef6 1044 <programlisting># dnf -y --releasever=23 --installroot=/srv/mycontainer --disablerepo='*' --enablerepo=fedora --enablerepo=updates install systemd passwd dnf fedora-release vim-minimal
2b3987a8 1045# systemd-nspawn -bD /srv/mycontainer</programlisting>
8f7a3c14 1046
798d3a52
ZJS
1047 <para>This installs a minimal Fedora distribution into the
1048 directory <filename noindex='true'>/srv/mycontainer/</filename>
1049 and then boots an OS in a namespace container in it.</para>
1050 </example>
8f7a3c14 1051
798d3a52
ZJS
1052 <example>
1053 <title>Spawn a shell in a container of a minimal Debian unstable distribution</title>
8f7a3c14 1054
798d3a52 1055 <programlisting># debootstrap --arch=amd64 unstable ~/debian-tree/
25f5971b 1056# systemd-nspawn -D ~/debian-tree/</programlisting>
8f7a3c14 1057
798d3a52
ZJS
1058 <para>This installs a minimal Debian unstable distribution into
1059 the directory <filename>~/debian-tree/</filename> and then
1060 spawns a shell in a namespace container in it.</para>
1061 </example>
8f7a3c14 1062
798d3a52
ZJS
1063 <example>
1064 <title>Boot a minimal Arch Linux distribution in a container</title>
68562936 1065
798d3a52 1066 <programlisting># pacstrap -c -d ~/arch-tree/ base
68562936
WG
1067# systemd-nspawn -bD ~/arch-tree/</programlisting>
1068
ff9b60f3 1069 <para>This installs a minimal Arch Linux distribution into the
798d3a52
ZJS
1070 directory <filename>~/arch-tree/</filename> and then boots an OS
1071 in a namespace container in it.</para>
1072 </example>
68562936 1073
798d3a52
ZJS
1074 <example>
1075 <title>Boot into an ephemeral <literal>btrfs</literal> snapshot of the host system</title>
f9f4dd51 1076
798d3a52 1077 <programlisting># systemd-nspawn -D / -xb</programlisting>
f9f4dd51 1078
798d3a52
ZJS
1079 <para>This runs a copy of the host system in a
1080 <literal>btrfs</literal> snapshot which is removed immediately
1081 when the container exits. All file system changes made during
1082 runtime will be lost on shutdown, hence.</para>
1083 </example>
f9f4dd51 1084
798d3a52
ZJS
1085 <example>
1086 <title>Run a container with SELinux sandbox security contexts</title>
a8828ed9 1087
798d3a52 1088 <programlisting># chcon system_u:object_r:svirt_sandbox_file_t:s0:c0,c1 -R /srv/container
a8828ed9 1089# systemd-nspawn -L system_u:object_r:svirt_sandbox_file_t:s0:c0,c1 -Z system_u:system_r:svirt_lxc_net_t:s0:c0,c1 -D /srv/container /bin/sh</programlisting>
798d3a52
ZJS
1090 </example>
1091 </refsect1>
1092
1093 <refsect1>
1094 <title>Exit status</title>
1095
1096 <para>The exit code of the program executed in the container is
1097 returned.</para>
1098 </refsect1>
1099
1100 <refsect1>
1101 <title>See Also</title>
1102 <para>
1103 <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
f757855e 1104 <citerefentry><refentrytitle>systemd.nspawn</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
798d3a52
ZJS
1105 <citerefentry project='man-pages'><refentrytitle>chroot</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
1106 <citerefentry project='mankier'><refentrytitle>dnf</refentrytitle><manvolnum>8</manvolnum></citerefentry>,
798d3a52
ZJS
1107 <citerefentry project='die-net'><refentrytitle>debootstrap</refentrytitle><manvolnum>8</manvolnum></citerefentry>,
1108 <citerefentry project='archlinux'><refentrytitle>pacman</refentrytitle><manvolnum>8</manvolnum></citerefentry>,
1109 <citerefentry><refentrytitle>systemd.slice</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
1110 <citerefentry><refentrytitle>machinectl</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
3ba3a79d 1111 <citerefentry project='man-pages'><refentrytitle>btrfs</refentrytitle><manvolnum>8</manvolnum></citerefentry>
798d3a52
ZJS
1112 </para>
1113 </refsect1>
8f7a3c14
LP
1114
1115</refentry>