如何在具有只读文件系统的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: your server socket listen backlog is limited to 100 connections所述。

我尝试将以下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=4096net.core.somaxconn = 4096,然后再运行,但是它没有反射(reflect)在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,要么可以在容器启动后或升级到较新的Docker版本之后修改/proc文件系统。 run子命令具有 --sysctl 选项,该选项可以进行您设想的更改:
    $ docker run -ti --sysctl net.core.somaxconn=4096 --rm ubuntu /bin/bashroot@9e850908ddb7:/# sysctl net.core.somaxconnnet.core.somaxconn = 4096

    关于python - docker容器将监听队列大小增加到128以上,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43243483/

    10-12 22:57