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
相关推荐
修罗王18 小时前
Linux Docker 服务管理与排查实战指南(新手速查版)
运维·docker
张龙68720 小时前
Docker 镜像瘦身实战:从 1.2GB 到 128MB,我踩过的 7 个坑和一套可复制的方法论
运维·后端·docker
杨浦老苏1 天前
开源堡垒机 Warpgate:一个容器搞定 SSH、MySQL 和 Web 访问
运维·docker·ssh·堡垒机·群晖
ERD Online1 天前
docker-compose 一键部署的 MIT 开源数据库建模平台
数据库·docker·开源
三言老师1 天前
CentOS7.9 + Kubernetes 1.18.20 -清理所有 docker / containerd 残留
docker·容器·kubernetes
circuitsosk1 天前
从Docker到Kubernetes:AI应用服务化与弹性伸缩的落地实践
人工智能·docker·kubernetes·ai应用部署
showyoui1 天前
K8s 集群迁移踩坑:Istio 升级后 nginx 403
网络·docker·kubernetes·istio·service_mesh
golang学习记2 天前
Go 项目使用docker compose的正确方式
开发语言·docker·golang
雨声不在2 天前
私有 Docker Registry 排障实录:两个隐蔽的坑
docker·容器
读书读傻了哟2 天前
解决docker拉取镜像报错failed to resolve reference “docker.io/xxx“...i/o timeout问题
运维·docker·容器