systemd.nspawn 中文手册

译者:金步国


版权声明

本文译者是一位开源理念的坚定支持者,所以本文虽然不是软件,但是遵照开源的精神发布。

其他作品

本文译者十分愿意与他人分享劳动成果,如果你对我的其他翻译作品或者技术文章有兴趣,可以在如下位置查看现有的作品集:

联系方式

由于译者水平有限,因此不能保证译文内容准确无误。如果你发现了译文中的错误(哪怕是错别字也好),请来信指出,任何提高译文质量的建议我都将虚心接纳。


手册索引 . 指令索引systemd-235

名称

systemd.nspawn — 容器配置

大纲

/etc/systemd/nspawn/machine.nspawn

/run/systemd/nspawn/machine.nspawn

/var/lib/machines/machine.nspawn

描述

容器配置文件(后缀名必须是 .nspawn) 用于封装本地容器的运行时配置。 systemd-nspawn(1) 将会在启动一个容器时,搜索并读取对应的容器配置文件。 容器配置文件的名称必须与其定义的本地容器的名称保持一致。 这些配置文件并非必须, 仅在某个容器的执行环境确实与默认配置不一致的时候,才有可能需要专门使用一个特定的配置文件。 因为容器配置文件中的各项配置大多可以直接在 systemd-nspawn 命令行上指定, 所以仅在确实需要将某个容器的特殊配置持久保存起来的时候,才必须专门使用一个特定的配置文件。 容器配置文件的语法与 XDG Desktop Entry Specification 规定的 .desktop 文件以及 Microsoft Windows 的 .ini 文件相同。

单元文件中的布尔值可以有多种写法。 [ 1, yes, true , on ] 含义相同, [ 0, no, false, off ] 含义相同。

空白行和以 # 或 ; 开头的行都会被忽略。 行尾的反斜线(\)视为续行符, 并在续行时被替换为一个空格符。

.nspawn 文件搜索规则

容器配置文件的名称由容器的名称加上 .nspawn 后缀确定, 容器的名称可以明确的通过 systemd-nspawn 命令的 --machine= 选项指定, 也可以根据目录或镜像文件的名称派生。如果在 /etc/systemd/nspawn//run/systemd/nspawn/ 目录中找到了对应的配置文件, 那么将会应用其中的全部配置(但依然有可能会被命令行上的设置所覆盖), 同时将会停止进一步的搜索。 如果没有找到对应的配置文件, 那么将会进一步在容器镜像文件的所在目录、或容器根目录的所在父目录中搜索。 如果找到了对应的配置文件,那么将会仅应用其中的非特权指令, 所有特权指令, 也就是有可能造成权限提升或者要求访问主机资源(例如主机的文件或目录)的配置指令, 都将被忽略。 至于究竟有哪些选项属于特权指令,请继续阅读后文。

由系统管理员维护的配置文件(可信任)应该放在 /etc/systemd/nspawn/ 目录中, 而由容器发行商提供的配置文件(不可信任)应该放在 /var/lib/machines/ 目录中。 注意,/var/lib/machines/ 目录下的配置文件中包含的特权指令(见上文)都将被忽略。 如果你想要在容器发行商提供的配置文件中添加特权指令, 那么应该将容器发行商提供的配置文件复制到 /etc/systemd/nspawn/ 目录中, 然后编辑它,这样才能使得特权指令生效。 关于如何搜索与解释容器配置文件的精确规则,可以通过 systemd-nspawn--settings= 选项进行设置,详见 systemd-nspawn(1) 手册。

[Exec] 小节选项

可以在容器配置文件中包含 "[Exec]" 小节,用于设置各种与进程执行相关的参数:

Boot=

接受一个布尔值,默认值为 no 。若设为 yes 则表示 systemd-nspawn 将会自动搜索并调用一个 init 进程, 同时将 Parameters= 设置的命令行参数传递给被调用的 init 进程。此选项与 systemd-nspawn--boot 命令行开关相对应。注意:(1) Boot=yes 不可与 ProcessTwo=yes 同时使用。(2)当使用 systemd-nspawn@.service 模版时,就隐含的设置了 ProcessTwo=yes

ProcessTwo=

接受一个布尔值,默认值为 no 。若设为 yes 则表示以 PID=2 运行指定的进程。 此选项与 systemd-nspawn--as-pid2 命令行开关相对应。 因为 init 进程必须以 PID=1 运行,所以 ProcessTwo=yes 不可与 Boot=yes 同时使用。

Parameters=

接受一个空格分隔的参数列表。 当 Boot=no 时, 它必须是一个以二进制可执行文件开头的命令行(可以带有命令行参数); 当 Boot=yes 时, 它必须是传递给被调用的 init 进程的命令行参数。 此选项的值与传递给 systemd-nspawn 的命令行参数相对应。

Environment=

接受一个以 "key=value" 格式表示的环境变量赋值表达式。 用于给被调用的容器主进程设置环境变量。 可以多次使用此选项以设置多个环境变量。 此选项与 systemd-nspawn--setenv= 命令行选项相对应。

User=

接受一个 UNIX 用户名。 用于设置运行容器主进程的用户。 该用户必须在容器内部真实存在。 此选项与 systemd-nspawn--user= 命令行选项相对应。

WorkingDirectory=

设置容器内部进程的工作目录。必须设为一个以容器内部的文件系统名字空间为基准的绝对路径。 此选项与 systemd-nspawn--chdir= 命令行选项相对应。

PivotRoot=

设置在容器启动后,用于在容器内部取代 / 的替代目录。 可以设为一个单独的绝对路径或者一对冒号分隔的绝对路径。这些绝对路径都必须以容器内部的文件系统名字空间为基准。 此选项与 systemd-nspawn--pivot-root= 命令行选项相对应。

Capability=, DropCapability=

接受一个空格分隔的 capabilities(7) 列表。 Capability= 用于在默认已经拥有的 capabilities 基础之上添加更多的 capabilities ; DropCapability= 用于在默认已经拥有的 capabilities 基础之上删除特定的 capabilities 。 此二选项分别与 systemd-nspawn--capability=--drop-capability= 命令行选项相对应。 注意, Capability= 是一个特权指令, 仅在 .nspawn 文件位于 /etc/systemd/nspawn//run/system/nspawn/ 目录中时才能生效(见上文)。 而 DropCapability= 是非特权指令, 在所有位置都有效。

KillSignal=

systemd-nspawn 自身接收到 SIGTERM 信号时,应该给容器内 PID=1 进程发送什么信号, 从而使得容器可以正常有序的关闭。 当 Boot=yes 时默认值为 SIGRTMIN+3 (对于兼容 systemd 规范的 init 来说,SIGRTMIN+3 信号会触发正常的关机流程)。所有可用的信号请参考 signal(7) 手册。

Personality=

设置容器的体系架构(目前仅支持 "x86" 与 "x86-64" 两个值)。 此选项与 systemd-nspawn--personality= 命令行选项相对应。

MachineID=

设置传递给容器的128位"machine ID"(UUID) 。 此选项与 systemd-nspawn--uuid= 命令行选项相对应。 这是一个特权指令(见前文)。

PrivateUsers=

设置容器对用户名字空间的支持。此选项与 systemd-nspawn--private-users= 命令行选项相对应,并且可以接受的值也完全相同。这是一个特权指令(见前文)。 对于从 systemd-nspawn@.service 模版实例化而来的容器来说,此选项的默认值为 yes 。

NotifyReady=

设置容器内的 init 进程对通知机制的支持。 此选项等价于 systemd-nspawn--notify-ready= 命令行选项,并且可以接受的值也完全相同。 详见 systemd-nspawn(1) 手册。

SystemCallFilter=

设置容器的系统调用过滤器。 此选项等价于 systemd-nspawn--system-call-filter= 命令行选项,并且可以接受的值也完全相同。 详见 systemd-nspawn(1) 手册。

[Files] 小节选项

可以在容器配置文件中包含 "[Files]" 小节,用于设置各种与文件系统相关的参数:

ReadOnly=

接受一个布尔值。默认值为 no 。 设为 yes 表示将容器运行在一个只读文件系统上。 此选项与 systemd-nspawn--read-only 命令行开关相对应。

Volatile=

接受一个布尔值或特殊值 "state" , 表示是否以易变的状态和/或配置运行容器。 此选项与 systemd-nspawn--volatile= 命令行选项相对应。详见 systemd-nspawn(1) 手册。

Bind=, BindReadOnly=

添加一个从主机到容器的绑定挂载点。 接受一个单独的路径、或者一对冒号分隔的路径、 或者一个以冒号作为分隔符的"路径:路径:挂载选项"三元组。 可以多次使用此选项以添加多个绑定挂载点。 此二选项分别与 systemd-nspawn--bind=--bind-ro= 命令行选项相对应。详见 systemd-nspawn(1) 手册。 此二选项都是特权指令(见前文)。

TemporaryFileSystem=

向容器内添加一个 "tmpfs" 挂载点。 接受一个单独的路径、或者一个以冒号作为分隔符的"路径:挂载选项"。 可以多次使用此选项以添加多个 "tmpfs" 挂载点。 此选项与 systemd-nspawn--tmpfs= 命令行选项相对应。详见 systemd-nspawn(1) 手册。 此选项是特权指令(见前文)。

Overlay=, OverlayReadOnly=

向容器内添加一个 overlay 挂载点。接受一个以冒号作为分隔符的路径列表。 可以多次使用此选项以添加多个 overlay 挂载点。此二选项分别与 systemd-nspawn--overlay=--overlay-ro= 命令行选项相对应。详见 systemd-nspawn(1) 手册。 此二选项都是特权指令(见前文)。

PrivateUsersChown=

接受一个布尔值。设为 yes 表示在容器已启用用户名字空间的前提下, 是否要将容器内文件与目录的拥有者修改为由 PrivateUsers= 指定的特定范围内的 UID/GID 。 此选项与 systemd-nspawn--private-users-chown 命令行开关相对应。 此选项是特权指令(见前文)。

[Network] 小节选项

可以在容器配置文件中包含 "[Network]" 小节,用于设置各种与网络连接相关的参数:

Private=

接受一个布尔值。默认值为 no 。 设为 yes 表示将容器运行在自己专属的网络名字空间内, 也就是不与主机共享任何网络接口及网络配置。 此选项与 systemd-nspawn--private-network 命令行开关相对应。

VirtualEthernet=

接受一个布尔值。设为 yes 表示在主机与容器之间创建一个 虚拟以太网连接("veth"),并且自动隐含了 Private=yes 的设置。 此选项与 systemd-nspawn--network-veth 命令行开关相对应。 此选项是特权指令(见前文)。 对于从 systemd-nspawn@.service 模版实例化而来的容器来说,此选项的默认值为 yes 。

VirtualEthernetExtra=

在主机与容器之间设置一个虚拟以太网连接("veth")。 接受一对冒号分隔的网口名称("主机网口:容器网口"), 前一个名称表示主机上的网络接口名称, 后一个名称表示容器内的网络接口名称。 如果省略后一个,那么表示后一个名称与前一个名称相同。 设置此选项的同时也自动隐含了 Private=yes 的设置。 此选项与 systemd-nspawn--network-veth-extra= 命令行选项相对应。 可以多次使用此选项以添加多个虚拟以太网连接。 此选项与 VirtualEthernet= 之间没有关联,两者是互相独立的选项。 此选项是特权指令(见前文)。

Interface=

设置添加到容器中的网络接口的名称,接受一个空格分隔的网络接口名称列表。 此选项与 systemd-nspawn--network-interface= 命令行选项相对应。 设置此选项的同时也自动隐含了 Private=yes 的设置。 此选项是特权指令(见前文)。

MACVLAN=, IPVLAN=

在容器中添加一个 MACLVAN 或 IPVLAN 接口。 接受一个空格分隔的、要被添加到 MACLVAN 或 IPVLAN 中的网络接口名称列表。 此二选项分别与 systemd-nspawn--network-macvlan=--network-ipvlan= 命令行选项相对应。 设置此二选项之一的同时也自动隐含了 Private=yes 的设置。 此选项是特权指令(见前文)。

Bridge=

在容器中添加一个网桥,选项的值就是网桥的名称。 此选项隐含的设置了 VirtualEthernet=yesPrivate=yes , 并且将创建的虚拟以太网的主机端连接到容器内的网桥上。 此选项与 systemd-nspawn--network-bridge= 命令行选项相对应。 此选项是特权指令(见前文)。

Zone=

接受一个网络 zone 名称。此选项隐含的设置了 VirtualEthernet=yesPrivate=yes 并且将创建的虚拟以太网的主机端连接到一个自动管理的网桥上, 而这个自动管理的网桥的名称就是此选项的值(网络 zone 名称)再加上 "vz-" 前缀。此选项与 systemd-nspawn--network-zone= 命令行选项相对应。 此选项是特权指令(见前文)。

Port=

将容器的一个特定 TCP 或 UDP 端口映射到主机的特定端口上。 此选项与 systemd-nspawn--port= 命令行选项相对应。有关此选项接受的值的格式及含义,详见 systemd-nspawn(1) 手册。 此选项是特权指令(见前文)。

参见

systemd(1), systemd-nspawn(1), systemd.directives(7)