Configure Docker with the overlay2 storage driver

From FriendlyELEC WiKi
Jump to: navigation, search

查看中文

1 缘由

因为根文件系统已经使用了overlayfs, 所以docker无法直接开启overlay2, 有两种方法解决: 1) 将docker的数据目录转移到外置的存储器上, 比如格式化成ext4格式的u盘上
2) 禁用根文件系统的overlayfs (注:禁用后恢复出厂设置功能将失效)

1.1 方法1: 使用外置存储

这里假设你将外置存储挂载到/mnt/sda1目录, 并且提前已经备份好docker数据, 由于Linux系统与FriendlyWrt(OpenWrt)略有不同, 这里分开说明:

1.2 Linux系统=

# 创建用于挂载u盘的目录
sudo mkdir /mnt/sda1
 
# 查看u盘UUID
sudo blkid /dev/sda1
 
# 配置自动挂载
sudo vi /etc/fstab
 
# 在文件末尾加入如下内容(其中uuid需替换为真实的)
UUID=a3af95fb-8ad9-4bd0-a079-6b53f322be3d /mnt/sda1 ext4 suid,dev,exec,auto,nouser,async,noatime,nofail 0 0
 
# 挂载
sudo mount /mnt/sda1
 
# 查看当前存储驱动
docker info|grep -i storage
 
# 停止Docker
systemctl stop docker
 
# 清空数据,请自己提前备份
rm -rf /var/lib/docker
 
# 在外置存储上新建目录, 创建符号链接
mkdir /mnt/sda1/docker
ln -s /mnt/sda1/docker /var/lib/docker
 
# 修改配置文件
vi /etc/docker/daemon.json
#如果没有这个文件或没有内容,就直接把下面的粘贴进去
#不然就只添加那一条
#如果不是在最后一行加请自行在末尾添加逗号
{
    "storage-driver": "overlay2"
}
 
# 重新启动docker
systemctl restart docker
 
# 确认存储驱动已改变成overlay2
docker info|grep -i storage

1.2.1 FriendlyWrt系统

# 创建用于挂载u盘的目录
mkdir /mnt/sda1
 
# 查看u盘UUID
blkid /dev/sda1
 
# 配置自动挂载
vi /etc/config/fstab
 
# 在文件末尾加入如下内容(其中uuid替换为真实的)
config 'mount'
    option  target  '/mnt/sda1'
    option  uuid    'a3af95fb-8ad9-4bd0-a079-6b53f322be3d'
    option  enabled '1'
 
# 启动自动挂载,并立即挂载
/etc/init.d/fstab enable
block mount
 
# 查看当前存储驱动
docker info|grep -i storage
 
# 停止Docker
/etc/init.d/dockerd stop
 
# 清空数据,请自己提前备份
rm -rf /opt/docker
 
# 在外置存储上新建目录
mkdir /mnt/sda1/docker
 
# 修改配置文件
vi /etc/docker/daemon.json
# 内容如下
{ "storage-driver": "overlay2", "data-root": "/mnt/sda1/docker", "log-level": "warn", "iptables": true }
 
# 重新启动docker
/etc/init.d/dockerd start
 
# 确认存储驱动已改变成overlay2
docker info|grep -i storage

1.3 方法2: 禁用根文件系统的overlayfs

先禁用系统的 overlayfs, 方法是刷完系统后, 用 fdisk命令删除掉最好一个userdata分区 (默认大小为100M左右), SD卡的系统, 在电脑上直接操作SD卡即可: sudo fdisk /dev/sdX 命令(输入 m 获取帮助): d 分区号 (1-9, 默认 9): 9 命令(输入 m 获取帮助): w