更改 Docker 容器中的 inotify.max_user_instances 限制

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

我正在尝试在 Dockerfile 级别更改 docker env 的 inotify.max_user_instances 设置。我正在尝试这样做,因为我收到此错误:

应用程序启动异常:System.IO.IOException:配置的用户 已达到 inotify 实例数量的限制 (128)。

我已经用过:

 .AddJsonFile($"appsettings.json", optional: true, reloadOnChange: false);

我也尝试使用自定义“WebHost.CreateDefaultBuilder(args)”,因为有人指出它对同一文件使用 reloadOnChange: true 。

也尝试在 dockerfile 中运行:

RUN sysctl -w fs.inotify.max_user_watches=1048576
RUN echo fs.inotify.max_user_watches=1048576 | tee -a /etc/sysctl.conf && sysctl -p

但有人指出,从那种情况下跑是不可能的。

是否可以在 docker 镜像构建/部署阶段更改这些 sysctl 设置?我对此有点迷失。

如果有帮助,应用程序正在使用.net core 2.2

.net docker inotify
3个回答
12
投票

我在 Mac 版 Docker 上也遇到了同样的问题,而且该设置确实存在于主机而不是容器上。主机不是 Mac OS,而是在后台运行的 Linux VM。要更改那里的设置,您需要从终端访问它:

screen ~/Library/Containers/com.docker.docker/Data/vms/0/tty

如果出现空白屏幕,请点击

Enter
一次,您应该会收到
$docker-desktop
提示。通过键入命令应用您的设置:

sysctl -w fs.inotify.max_user_watches=1048576

退出屏幕 Ctrl-a dCtrl-a Ctrl-d。请参阅屏幕手册#分离

不幸的是,该设置不会保留并在重新启动后重置,因为底层文件系统是只读的。如果有人能告诉我该怎么做,我将不胜感激。

2021 年更新(请参阅此问题

根据 Docker 维护者的此 GitHub 问题评论,访问虚拟机的推荐方法是通过特权 Docker 容器。

尝试登录虚拟机:(我建议这样做,而不是使用 TTY 上的屏幕)

$ docker run -it --privileged --pid=host justincormack/nsenter1

5
投票

是否有可能从 docker 镜像构建阶段更改这些 sysctl 设置

不。映像构建的输出只是一个文件系统映像,加上一些有关默认环境变量的元数据以及在您

docker run
映像时运行的命令。它不包括正在运行的进程、sysctl 值或其他任何内容。

记住 sysctl 设置通常是全局内核级设置;由于所有 Docker 容器共享主机的内核,因此它们通常共享相同的 sysctl 值。 (由于容器通常也有独立的文件系统,因此通过 inotify 监视文件系统更改并不是一个常见的用例;如果代码或其他映像上下文发生重大更改,则更常见的是重建映像,然后删除并重新创建容器。)

您可以通过

docker run --sysctl
更改一组有限的值,但这些不包括 inotify 值。更改此值的唯一方法是在主机上以 root 身份在 Docker 外部运行
sysctl


0
投票

对于 Git Hub 操作: 尝试这个解决方案

container:
  image: node
  options: --user root --privileged
steps:
  - run: echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf
  - run: sysctl -p      
  - run: cat /proc/sys/fs/inotify/max_user_watches

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