docker-compose启动报错(library initialization failed - unable to allocate file descriptor table - out of memory#)问题解决
[TOC]
前言
我用docker开启容器靶场的时候,出现这个报错,最后出现139报错代号,然后去网上查找各种资料到处试,最后问题解决了,用这篇文章记录一下。
问题描述
library initialization failed - unable to allocate file descriptor table - out of memory#
翻译过来就是说:库初始化失败 - 无法分配文件描述符表 - 内存不足#
原因
(1) LimitNOFILE=infinity 虽然是不限制,但是在systemctl版本小于234的时候不生效,查看systemctl版本:systemctl --version
(2) docker容器的ulimit太小了,有文档说太大也不行
解决方法
解决方法一
1 | #修改/lib/systemd/system/docker.service文件 |
解决方法二
问题
因运存不足无法给进程分配更多的文件句柄数而异常退出
原运行指令
1 | docker run -d -p 8080:8080 docker-test:v1.0 |
1 | docker run --ulimit nofile=1024 -d -p 8080:8080 docker-test:v1.0 |
改为
解决方法三
在 /etc/systemd/system/ 目录下, 创建 docker.service.d 目录
进入该目录,创建一个文件,名为 docker.conf
在文件中加入以下配置:
1 | [Service] |
个人总结
我是使用的方法一修改了一下,修改/lib/systemd/system/docker.service文件,大概如下图:
在ExecStart后面加上
1 | --default-ulimit nofile=65535:65535 |
然后按方法一修改
然后记得重启docker
1 | systemctl daemon-reload |
之后问题就解决了。
评论