docker container增加侦听队列大小超过128

时间:2017-04-05 23:57:30

标签: python unix docker uwsgi

如何使用只读文件系统在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=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。

2 个答案:

答案 0 :(得分:4)

您需要以特权模式运行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

答案 1 :(得分:1)

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

sysctls:
  net.core.somaxconn: 1024

或者

sysctls:
  - net.core.somaxconn=1024

参考:https://docs.docker.com/compose/compose-file/#sysctls