纯水,因为和 emacs 无关
是什么
systemd 管理的容器
能做什么
- 提供完全的隔离环境,和宿主机共用内核,但是具有自己隔离的进程、用户,网络,文件命名空间
- 隔离级别可定制
- 允许绑定挂载,overlay 挂载
- 性能和 docker 持平
使用场景
- 运行隔离环境,取代大多数 docker 使用场景
- 运行无头桌面
特点
- 默认就是容器内写入持久化模式,但也可修改为易失模式(重启后修改丢失)
不能做什么
-
如果容器在宿主机上以非 root 身份运行,则容器内无法运行 flatpak 应用,原因在于对命名空间无操作权限
以 root 方式启动容器,本人未测试
-
如果容器在宿主机上以非 root 身份运行,则容器内对 /dev/uinput 无权限,因此 sunshine 中的鼠标控制完全失效
以 root 方式启动容器,本人未测试
安装
apt-get install systemd-container
配置
内核变量
net.ipv4.ip_forward = 1
net.ipv6.conf.all.forwarding = 1
防火墙
防火墙配置仅在 容器连到了一个虚拟的网桥 的情况的情况下需要定制,否则不需要
本文为了简单起见,不引入任何虚拟网桥,让容器直接使用宿主机的网络(完全访问权限)
虚拟网桥
本文为了简单起见,不引入任何虚拟网桥,让容器直接使用宿主机的网络(完全访问权限)
创建
/etc/systemd/nspawn/container-test.nspawn
持久化容器配置,container-test 替换为容器名(容器根目录名)
[Exec]
PrivateUsers=pick
Timezone=bind
# ResolvConf=off
ResolvConf=bind-host
[Files]
PrivateUsersOwnership=auto
# 绑定挂载:参考下述
# BindReadOnly=/default/etc/resolv.conf:/etc/resolv.conf
# Bind=/path/to/postgres:/var/lib/postgresql:owneridmap
[Network]
Private=no
创建容器根目录
cd /var/lib/machines
# container-test 替换为你的容器名
debootstrap --include=apt-transport-https,ca-certificates,dbus,libpam-systemd,systemd --arch=amd64 stable container-test https://mirrors.tuna.tsinghua.edu.cn/debian/
启动
sudo machinectl start container-test
# 无密码直接取得 root shell
sudo machinectl shell container-test
友情链接
https://linux.do/t/topic/691953
这个人是懂 nspawn 的,但如果想要在网络层面隔离容器和宿主机,或许不需要像上面链接里面说的配这么复杂