Docker 容器将侦听队列大小增加到 128 以上



如何在具有只读文件系统的 docker 映像上将侦听队列大小增加到 128 以上?

当我运行我的容器时,出现以下错误:

uWSGI: - Listen queue size is greater than the system max net.core.somaxconn (128).

我有一个带有基本映像 python:2.7 的 Dockerfile 。 我正在尝试增加 Unix 套接字和 TCP 连接侦听队列的系统级别限制,以便 uwsgi 可以将侦听队列限制设置为 1024,如 uwsgi 中所述:您的服务器套接字侦听积压限制为 100 个连接。

我尝试将这些RUN命令添加到 Dockerfile:

  • echo 4096 > /proc/sys/net/core/somaxconn
  • sysctl -w net.core.somaxconn=4096

但这些都分别失败并出现以下错误:

  • /bin/sh: 1: cannot create /proc/sys/net/core/somaxconn: Read-only file system
  • sysctl: setting key "net.core.somaxconn": Read-only file system

我还尝试挂载一个文件来覆盖/proc/sys/net/core/somaxconn,但失败了,出现错误cannot be mounted because it is located inside "/proc"

在运行之前,我还尝试在主机上运行sudo sysctl -w net.core.somaxconn=4096 net.core.somaxconn = 4096,但它没有反映在 docker 容器中; uwsgi 仍然失败并显示错误uWSGI: - Listen queue size is greater than the system max net.core.somaxconn (128)并且运行cat /proc/sys/net/core/somaxconn在容器中显示 128,而在主机上显示 4096。

如果您更喜欢使用docker-compose.以下是要调整的配置:

sysctls:
net.core.somaxconn: 1024

sysctls:
- net.core.somaxconn=1024

参考: https://github.com/compose-spec/compose-spec/blob/master/spec.md#sysctls

您需要在特权模式下运行 Docker,而不是在容器启动后修改/proc文件系统,或者升级到较新的 Docker 版本。run子命令具有--sysctl选项,该选项允许进行您设想的更改:

$ docker run -ti --sysctl net.core.somaxconn=4096 --rm ubuntu /bin/bash root@9e850908ddb7:/# sysctl net.core.somaxconn net.core.somaxconn = 4096

最新更新