pho*_*nix 8 .net inotify docker
我正在尝试在 Dockerfile 级别更改 docker env 的 inotify.max_user_instances 设置。我正在尝试这样做,因为我收到此错误:
应用程序启动异常:System.IO.IOException:已达到配置的 inotify 实例数量的用户限制 (128)。
我已经在使用:
.AddJsonFile($"appsettings.json", optional: true, reloadOnChange: false);
Run Code Online (Sandbox Code Playgroud)
我也尝试使用自定义“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
Run Code Online (Sandbox Code Playgroud)
但有人指出,不可能脱离这种背景。
是否有可能在 docker 镜像构建/部署阶段更改这些 sysctl 设置?我有点迷失于此。
如果有帮助,应用程序正在使用 .net core 2.2
我在 Docker for Mac 上遇到了同样的问题,并且设置确实存在于主机上而不是容器上。主机不是 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 d或Ctrl-a Ctrl-d。请参阅屏幕手册 # Detach。
不幸的是,由于底层文件系统是只读的,因此该设置不会保留并在重新启动后重置。如果有人能告诉我该怎么做,我将不胜感激。
是否有可能从 docker 镜像构建阶段更改这些 sysctl 设置
不会。映像构建的输出只是一个文件系统映像,加上一些有关默认环境变量和运行命令的元数据docker run
映像时要运行的命令的一些元数据。它不包括正在运行的进程、sysctl 值或其他任何内容。
请记住,sysctl 设置通常是全局内核级设置;由于所有 Docker 容器共享主机的内核,因此它们通常共享相同的 sysctl 值。(由于容器通常也有独立的文件系统,因此通过 inotify 监视文件系统更改并不是一个常见的用例;如果代码或其他映像上下文发生重大更改,则更常见的是重建映像,然后删除并重新创建容器。)
您可以通过一组有限的值进行更改docker run --sysctl
,但这些值不包括 inotify 值。更改此值的唯一方法是sysctl
在主机上以 root 身份在 Docker 外部运行。
归档时间: |
|
查看次数: |
5642 次 |
最近记录: |