当前位置: 首页 > 文档资料 > systemd 中文手册 >

systemd.nspawn 中文手册

优质
小牛编辑
141浏览
2023-12-01

名称

systemd.nspawn — 容器配置

大纲

/etc/systemd/nspawn/machine.nspawn

/run/systemd/nspawn/machine.nspawn

/var/lib/machines/machine.nspawn

描述

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

Ephemeral=

接受一个布尔值,默认值为 no 。若设为 yes 则表示以无痕模式运行容器,也就是,在启动时为容器的文件系统生成一个临时快照,并在容器终止时立即删除这个快照。此选项等价于 --ephemeral 命令行选项(参见 systemd-nspawn(1) 手册)。

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= 是非特权指令,在所有位置都有效。

NoNewPrivileges=

接受一个布尔值,为容器中的进程设置 PR_SET_NO_NEW_PRIVS 标记的值。此选项等价于 --no-new-privileges= 命令行选项(参见 systemd-nspawn(1) 手册)。

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) 手册。

LimitCPU=, LimitFSIZE=, LimitDATA=, LimitSTACK=, LimitCORE=, LimitRSS=, LimitNOFILE=, LimitAS=, LimitNPROC=, LimitMEMLOCK=, LimitLOCKS=, LimitSIGPENDING=, LimitMSGQUEUE=, LimitNICE=, LimitRTPRIO=, LimitRTTIME=

为容器设置特定的 POSIX 资源限制。等价于 --rlimit= 命令行选项,并且可以接受的值也完全相同。详见 systemd-nspawn(1) 手册。

OOMScoreAdjust=

设置该容器的 OOM ("Out Of Memory") 计分调整值。此选项等价于 --oom-score-adjust= 命令行选项,并且可以接受的值也完全相同。详见 systemd-nspawn(1) 手册。

CPUAffinity=

设置该容器的CPU关联性。此选项等价于 --cpu-affinity= 命令行选项,并且可以接受的值也完全相同。详见 systemd-nspawn(1) 手册。

Hostname=

设置容器的初始主机名。此选项等价于 --hostname= 命令行选项,并且可以接受的值也完全相同。详见 systemd-nspawn(1) 手册。

ResolvConf=

如何处理容器内的 /etc/resolv.conf 文件(也就是如何处理宿主系统与容器之间的DNS同步)。此选项等价于 --resolv-conf= 命令行选项,并且可以接受的值也完全相同。详见 systemd-nspawn(1) 手册。

Timezone=

如何处理容器内的 /etc/localtime 文件(也就是如何处理宿主系统与容器之间的本地时区同步)。此选项等价于 --timezone= 命令行选项,并且可以接受的值也完全相同。详见 systemd-nspawn(1) 手册。

LinkJournal=

通过软连接或绑定挂载控制容器内的日志对宿主系统的可见性。此选项等价于 --link-journal= 命令行选项,并且可以接受的值也完全相同。详见 systemd-nspawn(1) 手册。

[Files] 小节选项

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

ReadOnly=

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

Volatile=

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

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)