常见问题解答¶
以下部分提供了常见问题的答案。它们解释了如何解决常见问题,并为您指明更详细的信息。
为什么我的实例没有网络访问权限?¶
很可能您的防火墙阻止了您的实例的网络访问。有关问题和解决方法的更多信息,请参见 如何配置您的防火墙。
另一个导致连接问题的原因是在同一主机上运行 Incus 和 Docker。有关如何解决此类问题的说明,请参见 防止 Incus 和 Docker 的连接问题。
如何启用 Incus 服务器以进行远程访问?¶
默认情况下,Incus 服务器无法从网络访问,因为它仅监听本地 Unix 套接字。
您可以按照 如何将 Incus 暴露到网络 中的说明启用远程访问。
当我执行 incus remote add
时,它会要求我提供令牌?¶
为了能够访问远程 API,客户端必须向 Incus 服务器进行身份验证。
有关如何使用信任令牌进行身份验证的说明,请参见 向 Incus 服务器进行身份验证。
为什么我不应该运行特权容器?¶
特权容器可以执行影响整个主机的操作 - 例如,它可以使用 /sys
中的内容来重置网卡,这将重置整个主机的网卡,从而导致网络故障。有关更多信息,请参见 容器安全。
几乎所有操作都可以在非特权容器中运行,或者 - 在需要特殊权限的情况下,例如想要在容器中挂载 NFS 文件系统 - 您可能需要使用绑定挂载。
我可以在容器中绑定挂载我的主目录吗?¶
是的,您可以使用 磁盘设备 来执行此操作。
incus config device add container-name home disk source=/home/${USER} path=/home/ubuntu
对于非特权容器,您需要确保容器中的用户拥有有效的读/写权限。否则,所有文件将显示为溢出 UID/GID (65536:65536
),并且访问任何不可世界可读的内容都会失败。使用以下两种方法之一授予所需的权限
将
shift=true
传递给incus config device add
调用。这取决于内核和文件系统是否支持 ID 映射挂载(参见incus info
)。添加
raw.idmap
条目(参见 用户命名空间的 ID 映射)。在您的主目录上放置递归 POSIX ACL。
特权容器没有这个问题,因为容器中的所有 UID/GID 与外部相同。但这也是此类特权容器造成大多数安全问题的原因。
如何在 Incus 容器中运行 Docker?¶
要在 Incus 容器中运行 Docker,将容器的 security.nesting
属性设置为 true
incus config set <container> security.nesting true
请注意,Incus 容器无法加载内核模块,因此,根据您的 Docker 配置,您可能需要让主机加载额外的内核模块。您可以通过设置容器所需的内核模块的逗号分隔列表来做到这一点。
incus config set <container_name> linux.kernel_modules <modules>
此外,在您的容器中创建一个 /.dockerenv
文件可以帮助 Docker 忽略它在嵌套环境中运行时遇到的某些错误。
Incus 客户端(incus
)的配置文件存储在哪里?¶
incus
命令将配置文件存储在 ~/.config/incus
下。
该目录中存储着各种配置文件,例如:
client.crt
:客户端证书(按需生成)client.key
:客户端密钥(按需生成)config.yml
:配置文件(有关remotes
、aliases
等的信息)clientcerts/
:存储每个远程客户端证书的目录servercerts/
:存储属于remotes
的服务器证书的目录
为什么我无法从其他主机 ping 我的 Incus 实例?¶
许多交换机不允许更改 MAC 地址,并将丢弃具有不正确 MAC 的流量或完全禁用端口。如果您能够从主机 ping Incus 实例,但无法从其他主机 ping 它,则可能是这种原因。
诊断此问题的方法是在上行链路上运行 tcpdump
,您将看到 ARP Who has `xx.xx.xx.xx` tell `yy.yy.yy.yy`
,您发送了响应,但它们没有得到确认,或者 ICMP 数据包成功进出,但从未被另一个主机收到。
如何监控 Incus 的运行状态?¶
要查看有关 Incus 正在执行的操作和正在运行的进程的详细信息,请使用 incus monitor
命令。
例如,要显示所有类型消息的人类可读输出,请输入以下命令:
incus monitor --pretty
查看 incus monitor --help
以获取所有选项,并查看 如何调试 Incus 以获取更多信息。
为什么 Incus 在创建实例时会卡住?¶
检查您的存储池是否空间不足(通过运行 incus storage info <pool_name>
)。在这种情况下,Incus 无法完成解压缩镜像,您尝试创建的实例显示为已停止。
要更深入地了解正在发生的事情,请运行 incus monitor
(参见 如何监控 Incus 的运行状态?),并在 sudo dmesg
中检查任何 I/O 错误。
为什么启动容器突然失败?¶
如果启动容器突然失败,并出现与 cgroup 相关的错误消息(Failed to mount "/sys/fs/cgroup"
),这可能是由于在主机上运行了 VPN 客户端。
这对于 Mullvad VPN 和 Private Internet Access VPN 都是已知问题,但也可能发生在其他 VPN 客户端上。问题在于 VPN 客户端将 net_cls
cgroup1 挂载到 cgroup2 上(Incus 使用 cgroup2)。
解决此问题的最简单方法是停止 VPN 客户端,并使用以下命令卸载 net_cls
cgroup1:
umount /sys/fs/cgroup/net_cls
如果您需要保持 VPN 客户端运行,请将 net_cls
cgroup1 挂载到其他位置,并相应地重新配置 VPN 客户端。查看 此 Discourse 帖子 以获取有关 Mullvad VPN 的说明。
什么是 incusbr0-mtu
设备?¶
在 Incus 管理的桥接网络上设置 bridge.mtu
选项时,Incus 将创建一个名为 BRIDGE-mtu
的虚拟网络接口。该接口永远不会用于承载流量,但它具有请求的 MTU 设置,并且被桥接到网络桥接器中。
这将强制桥接器采用该 MTU,并避免桥接器配置的 MTU 随着接口添加到它而发生更改的问题。