我正在尝试在 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
最佳答案
Is there possibility to change those sysctl settings from the stage of docker image build
不。镜像构建的输出只是一个文件系统镜像,加上一些关于默认环境变量和命令的元数据,当你
docker run
图片。它不包括正在运行的进程、sysctl 值或其他任何内容。请记住,sysctl 设置通常是全局内核级设置;由于所有 Docker 容器共享主机的内核,因此它们通常共享相同的 sysctl 值。 (由于容器通常也具有隔离的文件系统,因此通过 inotify 监视文件系统更改并不是一个常见的用例;如果代码或其他图像上下文发生实质性更改,则更常见的是重建图像然后删除并重新创建容器。)
您可以通过
docker run --sysctl
更改一组有限的值但这些不包括 inotify 值。更改此值的唯一方法是运行 sysctl
,作为 root,在主机上,在 Docker 之外。
关于.net - 更改 Docker 容器中的 inotify.max_user_instances 限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57220658/