Difference between revisions of "Configure Docker with the overlay2 storage driver"
From FriendlyELEC WiKi
(Created page with "1") |
(updated by API) |
||
Line 1: | Line 1: | ||
− | 1 | + | [[Configure Docker with the overlay2 storage driver/zh|查看中文]] |
+ | ==缘由== | ||
+ | 因为根文件系统已经使用了overlayfs, 所以docker无法直接开启overlay2, 有两种方法解决: | ||
+ | 1) 将docker的数据目录转移到外置的存储器上, 比如格式化成ext4格式的u盘上 <br /> | ||
+ | 2) 禁用根文件系统的overlayfs (注:禁用后恢复出厂设置功能将失效) <br /> | ||
+ | ===方法1: 使用外置存储=== | ||
+ | 这里假设你将外置存储挂载到/mnt/sda1目录, 并且提前已经备份好docker数据, 由于Linux系统与FriendlyWrt(OpenWrt)略有不同, 这里分开说明: | ||
+ | ===Linux系统==== | ||
+ | <syntaxhighlight lang="bash"> | ||
+ | # 创建用于挂载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 | ||
+ | </syntaxhighlight> | ||
+ | ====FriendlyWrt系统==== | ||
+ | <syntaxhighlight lang="bash"> | ||
+ | # 创建用于挂载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 | ||
+ | </syntaxhighlight> | ||
+ | ===方法2: 禁用根文件系统的overlayfs=== | ||
+ | 先禁用系统的 overlayfs, 方法是刷完系统后, 用 fdisk命令删除掉最好一个userdata分区 (默认大小为100M左右), | ||
+ | SD卡的系统, 在电脑上直接操作SD卡即可: | ||
+ | sudo fdisk /dev/sdX | ||
+ | 命令(输入 m 获取帮助): d | ||
+ | 分区号 (1-9, 默认 9): 9 | ||
+ | 命令(输入 m 获取帮助): w |
Latest revision as of 03:46, 8 March 2023
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