Difference between revisions of "Configure Docker with the overlay2 storage driver/zh"

From FriendlyELEC WiKi
Jump to: navigation, search
(Created page with "1")
 
(updated by API)
 
Line 1: Line 1:
1
+
[[Configure Docker with the overlay2 storage driver|English]]
 +
==缘由==
 +
因为根文件系统已经使用了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

English

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