全球主机交流论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

CeraNetworks网络延迟测速工具IP归属甄别会员请立即修改密码
查看: 10820|回复: 11

向熟悉Docker的大佬请教

[复制链接]
发表于 2018-3-17 23:20:17 | 显示全部楼层 |阅读模式
200金钱
闲着无聊用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所在的系统也手动修改了连接数,似乎没有改善。

最佳答案

查看完整内容

这种情况,有可能是映射的端口中有被占用的导致的失败,其次,端口很多的话,不必手工映射,用这个 --net=host 这个参数试试
发表于 2018-3-17 23:20:18 | 显示全部楼层
这种情况,有可能是映射的端口中有被占用的导致的失败,其次,端口很多的话,不必手工映射,用这个 --net=host 这个参数试试
发表于 2018-3-17 23:39:44 | 显示全部楼层
本帖最后由 摸鱼小熊猫 于 2018-3-17 23:46 编辑

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

这个无解的,楼主放弃吧

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

补充:应该与配置没关系,我在1G内存的小鸡上测试的结果,和在内存16G的ks4c上是一样的,怀疑是docker本身的设计不支持这么多的端口映射

点评

多谢指点,我也认同你的观点,但是最终是@redalfa的答案,用--net=host 参数后搞定。当然我认为docker映射的端口数确实不能太多。  发表于 2018-3-18 09:36
发表于 2018-3-17 23:40:07 | 显示全部楼层
机子配置太烂了?
发表于 2018-3-18 00:53:43 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
发表于 2018-3-18 00:57:06 来自手机 | 显示全部楼层
GeekDuanLian 发表于 2018-3-18 00:53
就知道一定有你的回复233

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

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

用--net=host 搞定!不过,正如@摸鱼小熊猫说的,docker映射的端口数应该是有限制的,只不过我的应用中也没用到那么多,用--net=host 能解决。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|全球主机交流论坛

GMT+8, 2024-5-19 13:03 , Processed in 0.063320 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表