Docker迁移存储目录
问题起因 由于公司最开始的服务器在/var/lib/docker
没有挂载存储,容量只有40G,导致服务器磁盘用满。现将原有的Docker目录数据进行迁移。
请各位Kubernetes用户不要操作,因为容器编排不支持!
1 | # 启动容器发现如下报错 |
方法一: 软连接方式
1 | # 1.停止docker服务 |
方法二: 修改docker配置文件
注意: 这是一个旧版本
docker
修改存储目录的方式.
1 | vim /etc/docker/daemon.json |
新版本修改存储目录方式
1 | # 请找到你的docker.service存放位置 |
通过加入--data-root=/data/docker
进行修改默认的数据存储位置
1 | [Unit] |
修改完成之后重启docker
1 | systemctl daemon-reload # 重载service配置 |
Docker存储空间不足
问题一: No space left on device
问题描述:docker run
的时候系统提示No space left on device
!
这个问题无非就两种情况
磁盘满了
磁盘inode满了
因为 ext3
文件系统使用 inode table
存储 inode
信息,而 xfs
文件系统使用 B+ tree
来进行存储。考虑到性能问题,默认情况下这个 B+ tree
只会使用前 1TB
空间,当这 1TB
空间被写满后,就会导致无法写入 inode
信息,报磁盘空间不足的错误。我们可以在 mount
时,指定 inode64
即可将这个 B+ tree
使用的空间扩展到整个文件系统。
1 | # 查看inde信息 |
如果不知道小文件如何查找
1 | # 查找系统中 目录大小大于1M(目录一般大小为4K,所以目录要是大了那么文件必然很多) |
如果是硬盘空间满了的话
1 | # 查看磁盘使用容量 |
优雅地重启Docker
不停止重启,重启docker是一件多么美妙的事情!
当 Docker
守护程序终止时,它会关闭正在运行的容器。从 Docker-ce 1.12
开始,可以在配置文件中添加 live-restore
参数,以便在守护程序变得不可用时容器保持运行。需要注意的是 Windows
平台暂时还是不支持该参数的配置。
1 | vim /etc/docker/daemon.json |
在守护进程关闭的时候保持容器运行
1 | # 重载docker服务 |
live-restore的限制
当前的Live Restore特性可以在进行Daemon维护,或者在Daemon发生问题导致不可用的情况,减少容器的停机时间,不过其也有一定的限制。
- Docker版本升级限制
Live Restore仅支持Docker补丁版本升级时可用,也就是 YY.MM.x 最后一位发生变化的升级,而不支持大版本的升级。在进行大版本升级后,可能会导致Daemon无法重新连接到运行中容器的问题,这时候需要手动停止运行的容器。 - Daemon选项变更
也就是说Live Restore仅仅在某些Daemon级别的配置选项不发生改变的情况工作,例如Bridge的IP地址,存储驱动类型等。如果在重启Daemon时候,这些选项发生了改变,则可能会到Daemon无法重新连接运行中的容器,这时也需要手动停止这些容器。 - 影响容器的日志输出
如果Daemon长时间停止,会影响运行容器的日志输出。因为默认情况下,日志管道的缓冲区大小为64k,当缓冲写满之后,必须启动Daemon来刷新缓冲区。 - 不支持Docker Swarm
Live Restore只是独立Docker引擎的特性,而Swarm的服务是由Swarm管理器管理的。当Swarm管理器不可用时,Swarm服务是可以在工作节点上继续运行的,只是不同通过Swarm管理器进行管理,直到Swarm管理恢复工作。
容器内部中文异常
问题描述: 容器内部中文乱码、无法正常显示中文、
- 例如显示中文:
--------���
1 | # 查看容器内部编码 |
然而 POSIX
字符集是不支持中文的,而 C.UTF-8
是支持中文的只要把系统中的环境 LANG
改为 "C.UTF-8"
格式即可解决问题。同理,在 K8S
进入 pod
不能输入中文也可用此方法解决。
1 | export LANG=zh_CN.UTF-8 |