docker容器存放目录磁盘空间满了,转移数据修改Docker默认存储位置

原创 2018年04月17日 16:30:10

  今天在Liunx服务器上重启docker的时候,发现容器启动不了了,报的错误是:"ERROR:cannot  create temporary directory!"。我的猜测应该就是磁盘空间满了,于是执行命令"df -h",出来的结果是 挂载点/var/lib/docker/overlay/ 已用%为100%,真的是磁盘空间用完了。

     我不理解的是我的容器有配置数据卷呀,容器里面动态增长的数据例如上传的图片、产生的日志都是放在数据卷里面的,照常来说是不会导致容器满了呀,后面问了公司的美女,美女说让我执行命令:docker ps -s ,看看容器大小是不是太大了,如果是太大了应该就是数据卷没有设置好。按照美女说的执行了,发现容器大小跟我第一次运行容器的大小一样,那就说明数据卷是设置成功了。然后就继续问美女咯,美女问docker是谁装的,我回到说是我自己安装的并且还是采用离线的方式安装的,美女就说那你就是docker默认目录没有改了,docker默认目录空间太小了,用不了多久就会满了。docker中默认存放镜像和容器的目录是:/var/lib/docker/,就是上面我说的挂载已经满了的家伙,那既然找到原因了,那就解决呗。解决办法就是迁移默认目录/var/lib/docker下面的所有文件到新的目录下面,然后将docker存放镜像和容器的目录改为新的目录。

      我的系统是Centos7,解决的具体步骤如下:

     1、停止docker服务。

                         systemctl stop docker; //每个liunx版本的命令不一样。

     2、创建新的docker目录,执行命令df -h,找一个大的磁盘。我的是放在/home目录下面,我的/home目录大小有900G。 我在 /home目录下面建了 /home/docker/lib目录,执行的命令是:mkdir -p /home/docker/lib

     3、迁移/var/lib/docker目录下面的文件到 /home/docker/lib下面

                            cp -R /var/lib/docker/* /home/docker/lib/

               注意:如果文件内容很多的话,为了确保成功最好是一个文件一个文件的拷贝。如果在拷贝过程中报“设备上没有空间”的错误,就使用mv剪切。

   4、修改docker配置(/etc/systemd/system/docker.service.d/devicemapper.conf),在文件末添加 --graph=/home/docker/lib

                           devicemapper.conf文件的内容如下:

                            [Service]

                            ExecStart=

                            ExecStart=/usr/bin/dockerd --insecure-registry=私服地址 --graph=/home/docker/lib

                            注意:如果/etc/systemd/system/docker.service.d/devicemapper.conf,这个路径找不到的话,就新建,新建之后加入内容,没有私服地址的话就可以去掉”--insecure-registry=私服地址”。

方法一、软链接

默认情况下Docker的存放位置为:/var/lib/docker

可以通过下面命令查看具体位置:

sudo docker info | grep "Docker Root Dir"

解决这个问题,最直接的方法当然是挂载分区到这个目录,但是我的数据盘还有其他东西,这肯定不好管理,所以采用修改镜像和容器的存放路径的方式达到目的。

这个方法里将通过软连接来实现。

首先停掉Docker服务:

systemctl restart docker或者service docker stop

然后移动整个/var/lib/docker目录到目的路径:

mv /var/lib/docker /root/data/docker

ln -s /root/data/docker /var/lib/docker

这时候启动Docker时发现存储目录依旧是/var/lib/docker,但是实际上是存储在数据盘的,你可以在数据盘上看到容量变化。



方法三、system下创建配置文件

在/etc/systemd/system/docker.service.d 目录下创建一个Drop-In文件“docker.conf”,默认 docker.service.d 文件夹不存在。所以你必须先创建它。

创建Drop-In 文件的原因,是我们希望Docker 服务,使用docker.conf文件中提到的特定参数,将默认服务所使用的位于/lib/systemd/system/docker.service文件中的参数进行覆盖。如果你想深入了解Drop-In,请阅读system.unit文档

定义新的存储位置现在打开docker.conf增加如下内容:

# sudo vi /etc/systemd/system/docker.service.d/docker.conf 

[Service] 

ExecStart= 

ExecStart=/usr/bin/dockerd --graph="/mnt/new_volume" --storage-driver=devicemapper

保存并退出VI编辑器,/mnt/new_volume 是新的存储位置,而devicemapper是当前docker所使用的存储驱动。如果你的存储驱动有所不同,请输入之前第一步查看并记下的值。Docker官方文档中提供了更多有关各种存储驱动器的信息。现在,你可以重新加载服务守护程序,并启动Docker服务了。这将改变新的镜像和容器的存储位置。

# sudo systemctl daemon-reload 

# sudo systemctl start docker

为了确认一切顺利,运行 # docker info 命令检查Docker 的根目录.它将被更改为/mnt/new_volume


     5、重载配置,重启docker

                            systemctl daemon-reload;

                            systemctl restart docker;

                             systemctl enable docker;

      6、启动成功后,确定容器没问题后删除/var/lib/docker/目录中的文件,然后就OK了。

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_37674858/article/details/79976751

Docker修改默认存储位置

Docker一般会将数据默认存储到 /var/lib/docker 目录下。 使用 docker info 命令可以查看Root Dir 地址: root@xxxxx:~# docker in...
  • u010825468
  • u010825468
  • 2018-01-05 14:20:34
  • 258

docker容器存放目录磁盘空间满了

今天在Liunx服务器上重启docker的时候,发现容器启动不了了,报的错误是:"ERROR:cannot  create temporary directory!"。我的猜测应该就是磁盘空间满了,于...
  • niu_hao
  • niu_hao
  • 2017-12-22 14:38:55
  • 2400

修改docker镜像,容器存放位置。

默认情况下docker的存放位置为: /var/lib/docker 一般根下分区我们不会给太大。镜像和容器越存越多一般我们有两种解决方法 1、挂载大分区到/var/lib/docker: 一般选择建...
  • open_data
  • open_data
  • 2015-07-29 13:17:33
  • 32129

Docker 修改默认存储位置

Docker 修改默认存储位置 首先使用 docker info 查看 docker 的基本信息 sudo docker info Containers: 0 Images: 5 Storage Dr...
  • kongxx
  • kongxx
  • 2015-12-15 09:31:56
  • 29840

CentOS下Docker存储路径修改

测试了下百度中大多数关于Docker修改存储路径的文档,由于是通过yum源安装的,发现在更改配置之后,存放的路径并没有被修改成功,需要通过修改系统服务的docker启动文件使其生效。 Cen...
  • hifour
  • hifour
  • 2017-04-11 16:01:53
  • 1225

两个修改Docker本地镜像与容器的存储位置的方法

1、软连接方式 查看docker信息 默认情况下Docker的存放位置为:/var/lib/docker 可以通过下面命令查看具体位置: sudo docker info | grep "Do...
  • qq_35510622
  • qq_35510622
  • 2018-01-23 14:14:16
  • 92

docker中修改镜像容器的存放目录

在默认情况下,Docker镜像和容器的默认存放位置为:/var/lib/docker 一般根下分区我们不会给太大。镜像和容器越存越多一般我们有两种解决方法: 1. 挂载大分区到/var/l...
  • github_37499193
  • github_37499193
  • 2017-04-19 21:28:23
  • 2067

Docker默认存储路径修改

Docker默认存储路径修改: root@gguxxing-docker:/var/lib#docker info Containers:17 Images:50 ServerVersion: 1.9...
  • gguxxing008
  • gguxxing008
  • 2016-07-27 16:51:51
  • 3458

Docker占满磁盘空间的解决办法

通过命令可以观察到/var/lib/docker目录很大,我的主机只有20G,这个目录占了18G;原因是devicemapper的空间设的太大,通过docker info打印的Data Space T...
  • TinyJian
  • TinyJian
  • 2017-02-12 22:50:43
  • 13636

修改docker默认存储位置

centos6下 vi /etc/sysconfig/docker: other_args="--graph=/server/docker --selinux-enabled -H fd:...
  • weiguang1017
  • weiguang1017
  • 2018-02-11 11:07:24
  • 131
收藏助手
不良信息举报
您举报文章:docker容器存放目录磁盘空间满了,转移数据修改Docker默认存储位置
举报原因:
原因补充:

(最多只允许输入30个字)