更改 Docker 容器中的 inotify.max_user_instances 限制
Change inotify.max_user_instances limit in Docker container
我正在尝试在 Dockerfile 级别更改 docker env 的 inotify.max_user_instances 设置。我正在尝试这样做,因为我收到此错误:
应用程序启动异常:System.IO.IOException:配置的用户
已达到 inotify 实例数量限制 (128)。
我已经在使用:
.AddJsonFile($"appsettings.json", optional: true, reloadOnChange: false);
我也尝试使用自定义 "WebHost.CreateDefaultBuilder(args)",因为有人指出它对同一文件使用 reloadOnChange: true。
在docker文件中也试过运行宁:
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 映像 build/deployment 阶段更改这些 sysctl 设置?我对此有点迷茫。
如果有帮助,应用程序正在使用 .net core 2.2
Is there possibility to change those sysctl settings from the stage of docker image build
没有。镜像构建的输出只是一个文件系统镜像,加上一些关于默认环境变量的元数据和 运行 当你 docker run
镜像时的命令。它不包括 运行ning 进程、sysctl 值或任何其他内容。
请记住,sysctl 设置通常是全局内核级设置;由于所有 Docker 容器共享主机的内核,它们通常共享相同的 sysctl 值。 (由于容器通常也有独立的文件系统,通过 inotify 监视文件系统的变化并不是一个真正常见的用例;如果代码或其他图像上下文发生实质性变化,则更常见的是重建图像,然后删除并重新创建容器。)
您可以通过 docker run --sysctl
更改一组有限的值,但这些值不包括 inotify 值。更改此值的唯一方法是 运行 sysctl
,作为 root,在主机上,在 Docker.
之外
我在 Docker 上遇到了与 Mac 相同的问题,实际上该设置存在于主机上而不是容器上。主机不是 Mac OS,而是幕后的 Linux 虚拟机 运行。要更改那里的设置,您需要从终端访问它:
screen ~/Library/Containers/com.docker.docker/Data/vms/0/tty
如果出现空白屏幕,请点击 Enter
一次,您应该会收到 $docker-desktop
提示。通过键入以下命令应用您的设置:
sysctl -w fs.inotify.max_user_watches=1048576
退出画面Ctrl-ad或Ctrl-aCtrl-d。见 screen manual # Detach.
不幸的是,由于底层文件系统是只读的,因此设置不会保留并在重启后重置。如果有人能告诉我该怎么做,我将不胜感激。
2021 年更新(参见此 )
根据 Docker 维护者 this GitHub issue comment 的说法,推荐的访问 VM 的方法是通过特权 docker 容器。
Try logging into the VM: (I recommend this instead of using screen on the TTY)
$ docker run -it --privileged --pid=host justincormack/nsenter1
我正在尝试在 Dockerfile 级别更改 docker env 的 inotify.max_user_instances 设置。我正在尝试这样做,因为我收到此错误:
应用程序启动异常:System.IO.IOException:配置的用户 已达到 inotify 实例数量限制 (128)。
我已经在使用:
.AddJsonFile($"appsettings.json", optional: true, reloadOnChange: false);
我也尝试使用自定义 "WebHost.CreateDefaultBuilder(args)",因为有人指出它对同一文件使用 reloadOnChange: true。
在docker文件中也试过运行宁:
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 映像 build/deployment 阶段更改这些 sysctl 设置?我对此有点迷茫。
如果有帮助,应用程序正在使用 .net core 2.2
Is there possibility to change those sysctl settings from the stage of docker image build
没有。镜像构建的输出只是一个文件系统镜像,加上一些关于默认环境变量的元数据和 运行 当你 docker run
镜像时的命令。它不包括 运行ning 进程、sysctl 值或任何其他内容。
请记住,sysctl 设置通常是全局内核级设置;由于所有 Docker 容器共享主机的内核,它们通常共享相同的 sysctl 值。 (由于容器通常也有独立的文件系统,通过 inotify 监视文件系统的变化并不是一个真正常见的用例;如果代码或其他图像上下文发生实质性变化,则更常见的是重建图像,然后删除并重新创建容器。)
您可以通过 docker run --sysctl
更改一组有限的值,但这些值不包括 inotify 值。更改此值的唯一方法是 运行 sysctl
,作为 root,在主机上,在 Docker.
我在 Docker 上遇到了与 Mac 相同的问题,实际上该设置存在于主机上而不是容器上。主机不是 Mac OS,而是幕后的 Linux 虚拟机 运行。要更改那里的设置,您需要从终端访问它:
screen ~/Library/Containers/com.docker.docker/Data/vms/0/tty
如果出现空白屏幕,请点击 Enter
一次,您应该会收到 $docker-desktop
提示。通过键入以下命令应用您的设置:
sysctl -w fs.inotify.max_user_watches=1048576
退出画面Ctrl-ad或Ctrl-aCtrl-d。见 screen manual # Detach.
不幸的是,由于底层文件系统是只读的,因此设置不会保留并在重启后重置。如果有人能告诉我该怎么做,我将不胜感激。
2021 年更新(参见此 )
根据 Docker 维护者 this GitHub issue comment 的说法,推荐的访问 VM 的方法是通过特权 docker 容器。
Try logging into the VM: (I recommend this instead of using screen on the TTY)
$ docker run -it --privileged --pid=host justincormack/nsenter1