docker java容器内存溢出 docker存储空间不足_Docker

报错内容

[root@Dream package]# docker build -t imapp .
[+] Building 21.0s (6/19)
 => [internal] load build definition from Dockerfile                                                                                                 0.1s
 => => transferring dockerfile: 907B                                                                                                                 0.0s
 => [internal] load .dockerignore                                                                                                                    0.1s
 => => transferring context: 2B                                                                                                                      0.0s
 => [internal] load metadata for docker.io/library/centos:7                                                                                          2.5s
 => [ 1/15] FROM docker.io/library/centos:7@sha256:be65f488b7764ad3638f236b7b515b3678369a5124c47b8d32916d6487418ea4                                  0.2s
 => => resolve docker.io/library/centos:7@sha256:be65f488b7764ad3638f236b7b515b3678369a5124c47b8d32916d6487418ea4                                    0.1s
 => => sha256:be65f488b7764ad3638f236b7b515b3678369a5124c47b8d32916d6487418ea4 1.20kB / 1.20kB                                                       0.0s
 => => sha256:dead07b4d8ed7e29e98de0f4504d87e8880d4347859d839686a31da35a3b532f 529B / 529B                                                           0.0s
 => => sha256:eeb6ee3f44bd0b5103bb561b4c16bcb82328cfe5809ab675bb17ab3a16c517c9 2.75kB / 2.75kB                                                       0.0s
 => ERROR [internal] load build context                                                                                                             18.2s
 => => transferring context: 1.45GB                                                                                                                 18.1s
 => [ 2/15] RUN mkdir /data                                                                                                                          0.9s
------
 > [internal] load build context:
------
ERROR: failed to solve: write /var/lib/docker/overlay2/pg3tim64h8tebbvpq5vhkqfbo/diff/ZIM-23.1.5.x86_64.all.tar: no space left on device

问题分析

Docker构建过程中报错了。错误信息显示磁盘空间不足。这个错误通常发生在Docker镜像的构建过程中,当本地磁盘空间不足时会出现此问题。

为了解决这个问题,可以尝试以下方法:

  1. 清理磁盘空间:删除不需要的文件或目录,释放磁盘空间。可以使用df -h命令检查磁盘使用情况,并使用rm命令删除不必要的文件。
  2. 清理Docker镜像:使用docker image prune命令清理不再使用的Docker镜像。
  3. 调整Docker配置:你可以通过删除未使用的Docker镜像、容器和卷来释放空间。运行docker system prune命令可以清理Docker资源。
  4. 扩大磁盘空间:如果上述方法无法解决问题,你可能需要考虑扩展磁盘空间或更换磁盘。

在这里,我们先看看磁盘空间分布情况地方

docker java容器内存溢出 docker存储空间不足_docker java容器内存溢出_02


然后我们切换磁盘空间(注意,会影响原来运行的docker容器)

问题解决

要让Docker使用 /dev/mapper/centos-home 分区的挂载点/home作为其存储路径,你可以通过编辑 Docker 的配置文件并修改其存储驱动来实现。以下是一些步骤供你参考:

  1. 使用文本编辑器打开 Docker 服务的配置文件 /etc/docker/daemon.json(如果文件不存在则创建它):
sudo vi /etc/docker/daemon.json
  1. 在文件中添加以下内容,将 data-root 设置为 /home(或者你希望的路径):
{
  "data-root": "/home"
}
  1. 保存并关闭文件。
  2. 重启 Docker 服务以使配置生效:
sudo systemctl restart docker

现在,Docker 将使用 /dev/mapper/centos-home 分区作为其存储路径。请确保目标分区具有足够的容量来存储 Docker 的镜像、容器和其他相关数据。

请注意,修改 Docker 的存储路径可能需要对文件权限进行适当的更改,以确保 Docker 正确访问和操作所需的文件。也请注意,这将使用 /home 分区的空间,并且可能会对其他系统文件或应用程序产生影响,请谨慎操作。

预防操作

如果重启失败,大家可以执行如下操作,查看错误信息:

  1. 运行以下命令来查看 Docker 服务的状态信息:
systemctl status docker.service

这会显示 Docker 服务的当前状态以及可能的错误消息。

  1. 运行以下命令来查看系统日志中与 Docker 服务相关的详细信息:
journalctl -u docker.service -xe

这会显示与 Docker 服务相关的日志,其中可能包含与错误相关的附加详细信息。

通过查看这些输出,你可以获取更多关于 Docker 服务失败的错误信息,以便进行进一步排查和解决。
如果报错如下 “Unable to get the full path to root (/dev/mapper/centos-home/docker)”,,就是Docker 在获取 /dev/mapper/centos-home/docker 的完整路径时遇到了问题。

这个错误可能是由于 Docker 无法解析给定路径导致的。请确保 /dev/mapper/centos-home/dev/mapper/centos-home/docker 这两个路径在系统中存在,并且有正确的权限。

你可以按照以下步骤来检查和解决问题:

  1. 确认 /dev/mapper/centos-home/dev/mapper/centos-home/docker 这两个路径是否存在。可以运行以下命令来检查:
ls -l /dev/mapper/centos-home
ls -l /dev/mapper/centos-home/docker

如果这些路径不存在,请确保正确设置了文件系统和挂载点,并按照上一次回答中的步骤来创建正确的路径。

  1. 确认这些路径的权限是否正确。通常情况下,Docker 需要有足够的权限来读取和写入存储路径。可以运行以下命令来检查权限:
ls -ld /dev/mapper/centos-home
ls -ld /dev/mapper/centos-home/docker

确保你具有适当的权限,通常是确保 Docker 用户组(如 dockerdockerroot)具有对这些路径的访问权限。

  1. 如果路径存在且权限正确,还可以尝试重新配置 Docker 来使用其他路径作为存储路径,例如使用 /var/lib/docker。编辑 /etc/docker/daemon.json 文件并修改 "data-root" 值为其他路径,然后重启 Docker 服务:
sudo vi /etc/docker/daemon.json
# 修改 "data-root" 的值为其他路径,例如 "/var/lib/docker"
sudo systemctl restart docker

尝试上述步骤后,如果问题仍然存在,就需要仔细查看错误消息和日志!