Podman pod 的文件观察程序已用完,pod sysctl 值受到保护

问题描述 投票:0回答:1

我正在运行 MacOS Sonoma,并全新安装了 Podman v5.2.0。

当我在 Debian 上部署一个标准 NodeJS pod 并将 NodeJS 应用程序部署到该 pod 时,我的问题就开始了。 Pod 标签是:

node:20-bookworm-slim

在此 Pod 中,我的 NodeJS 应用程序会监视文件系统更改并自动重新加载

npm run build:css -- --watch

但是,我的应用程序无法启动,因为我用完了文件观察程序。我收到错误了

Error: ENOSPC: System limit for number of file watchers reached


我尝试了所有增加 fs.inotify.max_user_watches 的标准方法,例如

echo 'fs.inotify.max_user_watches=524288' | tee -a /etc/sysctl.conf && sysctl -p

导致错误

sysctl: permission denied on key "fs.inotify.max_user_watches"

我还尝试直接使用

编辑值

echo 524288 | dd of=/proc/sys/fs/inotify/max_user_watches

但这会导致错误

dd: failed to open '/proc/sys/fs/inotify/max_user_watches': Read-only file system

无论我如何尝试,都不可能从 Pod 内部更改这些 inotify 值。


在了解到 Docker 和 Podman 从主机继承大部分 sysctl 值后,我尝试使用以下命令手动设置本地 MacOS maxfiles 值:

sudo sysctl -w kern.maxfiles=524288

但是,当我重新启动 Debian pod 并检查它的限制时:

cat /proc/sys/fs/inotify/max_user_watches

结果是

8192

因此,在我的 Mac 上更改此值对 Pod 中的值没有任何影响。

docker macos file-io debian podman
1个回答
0
投票

Podman v5.2.0 不启动使用 MacOS 作为主机的 pod。相反,Podman 使用自己的虚拟机(称为 Podman 默认机)启动新的 pod。新 Pod 继承的值不是来自您的系统,而是来自该虚拟机。

为了编辑此值,您需要通过 SSH 连接到 Podman 默认计算机。默认情况下它是锁定的,因此您需要在以下位置启用对该计算机的访问:

Settings > Preferences > Extension: Podman > Remote

您要确保“加载远程系统连接 (ssh)”已启用。

Setting to enable remote SSH to Podman Default Machines

然后,从您的终端使用

访问 Podman 默认机器

podman machine ssh

这应该会将您作为 root 加载到默认的 CentOS 容器中。从那里,你可以简单地运行

echo 'fs.inotify.max_user_watches=524288' | tee -a /etc/sysctl.conf && sysctl -p

永久更新 max_user_watches 参数。然后,启动的任何新 Pod 都会继承此参数。

注意:这应该适用于您需要在 pod 上执行的任何 sysctl 工作。您无法从 pod 中编辑其中许多值,因此您需要在 Podman 默认计算机中编辑它们并在启动时继承它们。

© www.soinside.com 2019 - 2024. All rights reserved.