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