%EF%BC%9A%E8%AE%BE%E5%A4%87%E4%B8%8A%E6%B2%A1%E6%9C%89%E5%89%A9%E4%BD%99%E7%A9%BA%E9%97%B4%E2%80%9D%E7%9A%84%E9%97%AE%E9%A2%98%E3%80%82%E4%BD%86%E5%8F%AF%E8%83%BD%E6%98%AF%E5%85%B6%E4%BB%96%E9%97%AE%E9%A2%98%E5%90%97%EF%BC%9F.png)
我有一些 docker 容器(NGINX / PHP、MySQL 等),多年来一直运行良好。然而,最近我在 NGINX / PHP 容器中的 Laravel 中运行 PHP 脚本时开始看到此错误。
mkdir(): No space left on device
据我所知,它似乎是在 Web 应用程序尝试在登录 OTP/2FA 步骤中使用 Laravel 中的 Illuminate\Support\Facades\Mail 发送电子邮件时抛出/生成的。我假设有人试图写入容器内的某种缓存文件夹/文件或其他目录,而这些目录一定是已满的,否则就没有权限写入该位置。
看起来大多数 nginx 缓存文件位于:容器中的 /var/cache/nginx。
虽然,最近代码没有任何改变。
有没有办法检查容器中的可用空间,或者以其他方式设置分配给 Docker 容器的大小?
答案1
默认情况下,容器可以访问的磁盘数量没有限制。有一个可用选项,但仅限于某些存储驱动程序:存储驱动程序选项
更可能是运行 Docker 容器的主机设备上没有剩余空间。您可以验证它是否正在运行:
# df -h
另一个原因可能是没有更多可用的 inode(即使文件系统没有填满也可能发生这种情况)。您可以验证它是否正在运行:
df -i
# or
tune2fs -l /dev/<your disk device>