【问题标题】:Change inotify.max_user_instances limit in Docker container更改 Docker 容器中的 inotify.max_user_instances 限制
【发布时间】:2019-07-26 13:03:10
【问题描述】:

我正在尝试在 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


    【解决方案1】:

    我在 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 dCtrl-a Ctrl-d。请参阅screen manual # Detach

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

    2021 年更新(见issue

    根据 Docker 维护人员的this GitHub issue comment,推荐的访问 VM 的方法是通过特权 docker 容器。

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

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

    【讨论】:

    • 刚刚碰到这个 - 我没有为 `~/Library/Containers/com.docker.docker/Data/vms/0/tty` 找到这样的文件。有什么想法吗?
    • 请看上面的更新
    【解决方案2】:

    是否有可能从 docker image build 阶段更改这些 sysctl 设置

    没有。镜像构建的输出只是一个文件系统镜像,加上一些关于默认环境变量的元数据和当你docker run 镜像时要运行的命令。它不包括正在运行的进程、sysctl 值或其他任何内容。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-13
      • 2021-03-29
      • 2017-02-16
      • 1970-01-01
      相关资源
      最近更新 更多