全球主机交流论坛

标题: 向熟悉Docker的大佬请教 [打印本页]

作者: drice    时间: 2018-3-17 23:20
标题: 向熟悉Docker的大佬请教
闲着无聊用docker整个酸酸 manyuser, 一旦映射的端口多了,就提示:
docker: Error response from daemon: driver failed programming external connectivity on endpoint focused_kowalevski (87249ef2f912b75741209237062cb83a2663155367bb4c7cfcc7a0530cdf90bd): Error starting userland proxy:.

比如开1000个端口,没有问题:
docker run --ulimit nofile=98304:98304 -p 30000-31000:30000-31000 docker-ss:v1

如果开2000个端口,就提示上面的问题:
docker run --ulimit nofile=98304:98304 -p 30000-32000:30000-32000 docker-ss:v1

测试用的数据库有700多个用户,分布在30000到33000的端口范围内

引用python2的基础系统,Dockerfile 大致是这样的:

FROM python:2

WORKDIR /usr/src/app

RUN pip install cymysql

COPY /root /

EXPOSE 30000-33000

CMD ["python", "/shadowsocks/server.py"]

改用alpine自己添加python也搞过,没有改善。
这个酸酸的数据库如果不是在docker里运行,是会出现 too many open files 的,要手动修改/etc/profile 修改连接数才会正常,不知会不会是这个原因导致。但是在docker所在的系统也手动修改了连接数,似乎没有改善。
作者: redalfa    时间: 2018-3-17 23:20
这种情况,有可能是映射的端口中有被占用的导致的失败,其次,端口很多的话,不必手工映射,用这个 --net=host 这个参数试试
作者: 摸鱼小熊猫    时间: 2018-3-17 23:39
本帖最后由 摸鱼小熊猫 于 2018-3-17 23:46 编辑

正好前段时间我也遇到这个问题,需要映射上万个容器的端口到宿主机,效果和楼主一样:端口少的时候怎么着都可以,映射的数量超过一个阈值,docker daemon就会出现奇怪的错误,列如你遇到的这种,严重的时候会出现容器删不掉(docker rm -f `docker ps -aq`),经过多次测试,我那台机器上极限值是600。
容器数*每个容器需要映射的端口数=600左右,你这是一个容器映射很多端口报错,如果你试试一个容器映射很少的数量,但是有100个容器一起映射,应该也会报错。

这个无解的,楼主放弃吧

如果是多个容器,可以用nginx做反向代理,通过传入env变量把流量分发给后端的容器(代替直接端口映射)

补充:应该与配置没关系,我在1G内存的小鸡上测试的结果,和在内存16G的ks4c上是一样的,怀疑是docker本身的设计不支持这么多的端口映射
作者: cdseoo    时间: 2018-3-17 23:40
机子配置太烂了?
作者: GeekDuanLian    时间: 2018-3-18 00:53
提示: 作者被禁止或删除 内容自动屏蔽
作者: 摸鱼小熊猫    时间: 2018-3-18 00:57
GeekDuanLian 发表于 2018-3-18 00:53
就知道一定有你的回复233

这都被你发现了 尬笑
作者: qfdk    时间: 2018-3-18 03:09
路过,有没有看一下主机所占用的端口有没有在你的段里面。
另外docker info 一下看看版本之类的,然后再找问题。
再说了都700+的用户了,再开个小鸡呗
作者: zombie    时间: 2018-3-18 07:06
这个东西,估计要换lxc的底层就可以了
作者: drice    时间: 2018-3-18 09:37
qfdk 发表于 2018-3-18 03:09
路过,有没有看一下主机所占用的端口有没有在你的段里面。
另外docker info 一下看看版本之类的,然后再找 ...

主机没有占用端口的,仔细确认过了。另外,700+用户只是测试啦。。。
作者: drice    时间: 2018-3-18 09:39
redalfa 发表于 2018-3-17 23:20
这种情况,有可能是映射的端口中有被占用的导致的失败,其次,端口很多的话,不必手工映射,用这个 --net=h ...

用--net=host 搞定!不过,正如@摸鱼小熊猫说的,docker映射的端口数应该是有限制的,只不过我的应用中也没用到那么多,用--net=host 能解决。
作者: 摸鱼小熊猫    时间: 2018-3-19 10:21
摸鱼小熊猫 发表于 2018-3-17 23:39
正好前段时间我也遇到这个问题,需要映射上万个容器的端口到宿主机,效果和楼主一样:端口少的时候怎么着都 ...

客气客气




欢迎光临 全球主机交流论坛 (https://hostloc.gdisk.cf/) Powered by Discuz! X3.4