You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MongoDB Docker容器启动失败:无法写入PID文件,设备无剩余空间

MongoDB容器启动后立即退出,日志提示"Cannot write pid file to /tmp/...: No space left on device"

问题描述

我通过以下命令启动MongoDB容器:

docker run -d -p 27017:27017 --net=cdt-net --name cdt-mongo mongo

但容器很快退出,查看容器状态显示:

0e35cf68a29c mongo "docker-entrypoint.s…" Less than a second ago Exited (1) 3 seconds ago cdt-mongo

查看Docker日志输出如下:

$ docker logs 0e35cf68a29c
about to fork child process, waiting until server is ready for connections.
forked process: 21
2018-01-12T23:42:03.413+0000 I CONTROL [main] ***** SERVER RESTARTED *****
2018-01-12T23:42:03.417+0000 I CONTROL [main] ERROR: Cannot write pid file to /tmp/tmp.aLmNg7ilAm: No space left on device
ERROR: child process failed, exited with error number 1

请问该错误是什么原因?是否是容器内存储空间不足?


问题原因与解决办法

先给你明确结论:这个问题不是容器内部存储空间不足,而是你的宿主机磁盘(具体是/tmp所在的分区)已经被占满了。

MongoDB启动过程中需要在容器的/tmp目录写入pid文件,但Docker容器默认会和宿主机共享磁盘资源,当宿主机的对应分区没有剩余空间时,容器自然没办法完成写入操作,直接启动失败退出了。

你可以按下面的步骤来排查和解决:

  • 第一步:检查宿主机的磁盘使用情况,执行这条命令:
    df -h
    
    看输出里/分区(或者/tmp所在的分区)的使用率,大概率是已经100%占用了。
  • 第二步:清理空间释放资源:
    • 可以先清理Docker的闲置资源,比如没用的镜像、停止的容器、未使用的卷,用这条命令一键清理:
      docker system prune -a
      
      注意:执行前确认这些闲置资源你都不需要了,避免误删有用的内容。
    • 另外直接清理宿主机/tmp目录下的临时文件也是个快速释放空间的办法:
      sudo rm -rf /tmp/*
      
      或者用系统自带的tmpwatch这类工具来自动清理过期临时文件。
  • 第三步:清理完空间后重新启动MongoDB容器,应该就能正常运行了。

如果你想彻底避免这种依赖宿主机/tmp空间的问题,还可以在启动容器时给/tmp挂载一个内存临时文件系统,这样就不会占用磁盘空间了,启动命令改成这样:

docker run -d -p 27017:27017 --net=cdt-net --name cdt-mongo --tmpfs /tmp mongo

内容的提问来源于stack exchange,提问作者user7898461

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:08:15