如何解决Docker部署的QuestDB出现的errno=24错误?
解决Docker部署QuestDB的文件打开数限制问题
查看Docker内QuestDB进程的当前文件限制
- 进入QuestDB容器:
docker exec -it <你的QuestDB容器名或ID> bash - 查找QuestDB主进程PID:
输出中找到ps aux | grep questdbio.questdb.Main对应的进程ID(PID) - 查看该进程的文件限制:
重点关注cat /proc/<PID>/limitsMax open files行的软限制(Soft Limit)和硬限制(Hard Limit)
提升Docker内QuestDB的文件打开数限制
临时调整(容器重启后失效)
进入容器后,直接修改当前shell的文件限制,然后重启QuestDB进程:
ulimit -n 65536 # 重启QuestDB,容器会自动重启进程 kill <QuestDB的PID>
永久配置(容器启动时生效)
方式1:docker run命令指定
启动容器时添加--ulimit参数:
docker run -d --name questdb \ -p 9000:9000 -p 8812:8812 -p 9009:9009 \ --ulimit nofile=65536:65536 \ questdb/questdb
方式2:Docker Compose配置
在docker-compose.yml的QuestDB服务中添加ulimits字段:
services: questdb: image: questdb/questdb ports: - "9000:9000" - "8812:8812" - "9009:9009" ulimits: nofile: soft: 65536 hard: 65536
然后重新启动容器:
docker-compose up -d
方式3:全局Docker daemon配置(所有容器生效)
编辑Docker守护进程配置文件/etc/docker/daemon.json:
{ "default-ulimits": { "nofile": { "Hard": 65536, "Soft": 65536 } } }
重启Docker daemon使配置生效:
systemctl restart docker
之后重启QuestDB容器即可应用新限制。
注意事项
容器的文件打开数硬限制不能超过宿主机的硬限制,所以需确保宿主机已配置足够的限制:
- 编辑宿主机的
/etc/security/limits.conf,添加:* soft nofile 65536 * hard nofile 65536 root soft nofile 65536 root hard nofile 65536 - 重启宿主机或重新登录后,宿主机的限制会生效。
内容的提问来源于stack exchange,提问作者Nick The Greek
相关产品推荐
相关产品推荐

