Configure Docker with the overlay2 storage driver
From FriendlyELEC WiKi
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