-- docker中asp.net core报错:the configured user limit (128) on the number of inotify instances has been reached
【官网】:https://github.com/dotnet
应用场景
当我们把asp.net core web程序部署到docker中时,有时会报错:'the configured user limit (128) on the number of inotify instances has been reached'.基础资源
无
使用须知
1)根据具体的.net core 版本使用对应的代码。 2)如果不是docker环境,且需要关注文件自动加载更新则慎用本篇介绍的方法。
配置步骤
【方案1: 增加相关限制的环境配置】
增加fs.inotify.max_user_instances中/etc/sysctl.conf:
echo fs.inotify.max_user_instances=524288 或
sudo tee -a /etc/sysctl.conf && sudo sysctl -p
【方案2.1: 低于asp.net core 3.1版本中关闭监控文件修改开关:reloadOnChange】
<步骤1>
public interface IConfigurationManager
{
T GetAppConfig<T>(string key, T defaultValue = default(T));
}
public class ConfigurationManager : IConfigurationManager
{
private readonly IConfigurationRoot config;
public ConfigurationManager(IConfigurationRoot config)
=> this.config ?? throw new ArgumentNullException(nameof(config));
public T GetAppConfig<T>(string key, T defaultValue = default(T))
{
T setting = (T)Convert.ChangeType(configuration[key], typeof(T));
value = setting;
if (setting == null)
value = defaultValue;
}
}
<步骤2>
services.AddSingleton<IConfigurationManager>(new ConfigurationManager(this.Configuration));
【方案2.2: asp.net core 3.1中关闭监控文件修改开关:reloadOnChange】
public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .ConfigureAppConfiguration((hostingContext, config) => { config.AddJsonFile("appsettings.json", optional: true, reloadOnChange: false);
config.AddJsonFile($"appsettings.{environmentName}.json", true, false); })
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
}
常见问题
快速入门
【如何让docker中已部署的asp.net core 程序对应的appsetting.json的变更生效?】
步骤: 需要删除->重新创建容器->部署容器.
注: 即使重启docker也无法实现,根据普通的Unix模型.进程可以为其子进程设置初始环境,但是一旦它执行了子进程,它就不再能够控制环境了. docker exec在容器命名空间中启动一个新进程,因此如果更改环境变量,它只会影响该进程而不影响主容器进程.
有许多选项只能在初始docker run命令期间设置.这包括环境变量,还包括卷装入和已发布端口.重要的是,它还包括底层image:如果您有新的应用程序版本,或者需要更新底层操作系统分发以解决安全问题, 只有删除并重新创建容器. 根据经验"docker rm"是常见处理命令。
换一句话说:一旦构建了容器并将其以不可变的版本推送到其容器存储库后,它就不会更改(只有部署时的环境变量才能修改)。在这种情况下,完全没必要打开“ reloadOnChange”。关闭它,导致出现"the configured user limit (128) on the number of inotify instances has been reached"问题的次数少很多。