docker 启动报错
library initialization failed - unable to allocate file descriptor table - out of memory
1.报错日志
library initialization failed - unable to allocate file descriptor table - out of memory/cm-server/aiboxCloud-web/boot/entrypoint.sh: line 2: 6 Aborted (core dumped) java -Xms1024m -Xmx2048m -jar -XX:+PrintGCDateStamps -XX:+PrintGCDetails -Xloggc:/cm-server/logs/gc-%t.log -Dfile.encoding=utf-8 -Duser.timezone=GMT+8 -XX:MaxDirectMemorySize=512m .runtime/modular-bpm-runtime.jar
2.原因:
(1) LimitNOFILE=infinity 虽然是不限制,但是在systemctl版本小于234的时候不生效,查看systemctl版本:systemctl --version
(2) docker容器的ulimit太小了,有文档说太大也不行
3.解决方法
#修改/lib/systemd/system/docker.service文件
LimitCORE=infinity
LimitNOFILE=infinity
LimitNPROC=infinity
改成
LimitCORE=65535
LimitNOFILE=65535
LimitNPROC=65535
systemctl daemon-reload
systemctl restart docker
#重启docker服务
解决方法二
问题
因运存不足无法给进程分配更多的文件句柄数而异常退出
原运行指令
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
在文件中加入以下配置:
[Service]
ExecStart=
ExecStart=/usr/bin/dockerd --default-ulimit nofile=65535:65535 -H fd://