在docker容器中安装docker服务,基于fuse-overlayfs进行overlay挂载,而不是vfs

发布于:2025-06-29 ⋅ 阅读:(17) ⋅ 点赞:(0)

1、docker 安装

正常安装docker软件,运行docker时,会提示:No docker socket 服务

2、启动docker服务(包含守护进程)

systemctl start docker
#dockerd &

if ! ps aux | grep -v grep | grep -q "dockerd"; then
    echo "Starting dockerd in background..."
    nohup dockerd > /dev/null 2>&1 &
    export DOCKER_DAEMON_STARTED_BY_BASHRC=1  # 标记由本脚本启动
else
    echo "dockerd is already running."
fi

现在可以运行了,但是发现运行在vfs模式,非常占用IO,需要更换成overlay模型

docker info | grep "Storage Driver" 可确认当前存储驱动是否为 vfs。若输出为 Storage Driver: vfs,则说明 Docker 未使用 overlay2。

3、容器内需要安装overlay模组

我的思路是直接apt安装,发现不行。然后我把宿主机的 /lib/modules/5.4.0-* 复制到容器中。通过这个可查看内核版本$(uname -r)
加载模块


     depmod -a
    modprobe overlay
    lsmod | grep overlay

4、这个时候还是无法dockerd启动overlay,还是用fuse-overlayfs

内核态搞不了就换成用户态的overlay,到https://github.com/containers/fuse-overlayfs的release页面下载二进制bin文件。然后复制到容器的/bin目录

检查模块是否加载:

lsmod | grep overlay  # 或 modinfo overlay

fuse-overlayfs --version

这个时候我这边启动dockerd已经ok

最后在容器的 .bashrc 添加脚本,确保每次都能启动docker服务

systemctl start docker
#dockerd &

if ! ps aux | grep -v grep | grep -q "dockerd"; then
    echo "Starting dockerd in background..."
    modprobe overlay
    lsmod | grep overlay
    nohup dockerd > /dev/null 2>&1 &
    export DOCKER_DAEMON_STARTED_BY_BASHRC=1  # 标记由本脚本启动
else
    echo "dockerd is already running."
fi


网站公告

今日签到

点亮在社区的每一天
去签到