Docker Redis容器在用户定义的networking中获取警告:/ proc / sys / net / core / somaxconn

嘿家伙,我很难与这一个,我需要帮助。 我需要在用户定义的networking上运行一个Redis容器,并为其分配一个静态IP,所以我有这个: docker run -v /root/test/:/data/ -p 7001:7001 --net iso_nw --ip 172.18.0.2 --name testy -d redis redis-server /data/redis.conf这会导致我的Redis实例显示TCP backlog警告:

WARNING: The TCP backlog setting of 65536 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.

我的大脑被炸,试图使这个警告消失,而不使用--net host 。 有人能帮助我吗。 谢谢。

我想到了。 首先,我尝试使用的TCP积压设置是无效的。 允许的最大值是65535这是一个短的unsigned int,所以我用这个值更新了我的Redisconfiguration。

现在我可以通过加载/ proc /作为一个可写卷来运行容器并回显值:

 docker run -v /root/test/:/data/ -v /proc/:/wproc/ -p 7001:7001 --net iso_nw --ip 172.18.0.2 --name testy -d redis echo 65535 > /wproc/sys/net/core/somaxconn && redis-server /data/redis.conf 

可悲的是,你的命令不适合我。
相反,下面做了:

 docker run --name redis --rm -p 6379:6379 -ti --privileged redis:4.0.1 \ /bin/bash -c 'echo 65535 > /proc/sys/net/core/somaxconn ; redis-server' 

这些是相关的发现:

  • 嵌套的命令(传递给bash)必须被引用。
  • 没有 – --privileged ,我无法写入容器的/proc/sys

不要忘记使用您自己的设置端口,名称,版本,…

docker工具的最新版本现在有–sysctl命令可用,所以这应该做到这一点:

 docker run --name myredis --sysctl net.core.somaxconn=511 -d redis