docker容器启动报错:library initialization failed - unable to allocate file descriptor table - out of memory

出现 "library initialization failed - unable to allocate file descriptor table - out of memory" 这个错误通常是因为 Docker 容器在启动时分配的文件描述符(file descriptors)数量不足。这可能是因为系统或 Docker 守护进程的 ulimit 设置不当。

一、查看系统或 Docker 守护进程的 ulimit

  1. 查看系统的 ulimit 设置
  • 使用命令在终端中查看当前用户的 ulimit 设置:
复制代码
ulimit -a
  • 要查看所有用户的 ulimit 设置,可以查看 `/etc/security/limits.conf` 文件:
复制代码
vi /etc/security/limits.conf
  1. 查看 Docker 守护进程的 ulimit 设置
  • 首先,找到 Docker 守护进程的 PID(进程 ID)。使用命令:
复制代码
pidof dockerd
  • 然后,查看 `/proc/<pid>/limits` 文件,其中 `<pid>` 是 Docker 守护进程的 PID。例如:
复制代码
cat /proc/$(pidof dockerd)/limits

二、修改系统或 Docker 守护进程的 ulimit(以下方式二选一)

1.修改 Docker 容器的 ulimit 设置:在启动容器时(即修改Dockerfile),可以单独为容器设置 ulimit 参数。例如,使用命令为容器设置文件描述符的限制。

复制代码
docker run --ulimit nofile=20480:40960 

2.修改 Docker 守护进程的默认 ulimit 设置:可以在 Docker 守护进程的配置文件中添加或修改 ulimit 参数。例如,在 /etc/systemd/system/docker.service 或 /usr/lib/systemd/system/docker.service 文件中,在 ExecStart 行后面添加 --default-ulimit nofile=65536:65536 参数(注意不能换行 ),然后重启 Docker 服务。

三、重启 Docker 服务(选择修改文件方式需要)

复制代码
1.重新加载 systemd 的配置
sudo systemctl daemon-reload
2.重启
sudo systemctl restart docker
相关推荐
Lvan的前端笔记7 小时前
docker:每个前端项目一个 Nginx 容器还是只有一个Nginx容器
前端·nginx·docker
sbjdhjd12 小时前
云安全 | Docker 容器逃逸复盘(三):docker.sock 挂载与 Docker-in-Docker 风险
经验分享·网络安全·docker·云原生·容器·kubernetes·云安全
帷幕落秋14 小时前
Docker的两种安装
运维·docker·容器
工业一体机老司机14 小时前
工业一体机选购后的系统部署:Ubuntu下Docker容器化运行与GPIO配置
linux·ubuntu·docker·人机交互
姜鱼问生17 小时前
docker exec 排查容器问题:从日志到进程
运维·网络·数据库·docker·容器
人生百态,人生如梦18 小时前
Ubuntu在低版本下使用ccswitch+claudecode(CCSwitch+Docker+Claude)连调教程
linux·ubuntu·docker·claudecode·ccswitch
程序员老赵18 小时前
Docker 部署 OpenViking:轻松搭建 AI Agent 上下文数据库平台
docker·开源·agent
吴声子夜歌19 小时前
Docker入门与实战——高级镜像构建
docker
坐看风云变幻20 小时前
Betaflight 开发环境搭建保姆级教程(Ubuntu / Windows+WSL / Docker 三方案 + 官方网址大全)
windows·ubuntu·docker·无人机·飞控·betaflight
零基础12320 小时前
Docker 部署实战:从入门到精通
docker·容器