logo NodeSeekbeta

[教程] 在iStoreOS/OpenWRT上使用Docker构建一个Debian虚拟环境

在iStoreOSOpenWRT上 使用Docker 构建一个Debian虚拟环境

博客归档

在iStoreOS/OpenWRT上使用Docker构建一个Debian虚拟环境


前言

最近在捣鼓软路由,不免少不了进行测试
测试过程中经常要用到一些ubuntu/debian上才能用到的命令/脚本
有的命令就算在opkg可以安装,但是用起来就是没有apt来的顺手和方便

于是就在想能不能开个虚拟机,但是看着我的4H4G Arm软路由想想还是算了
想到毕竟openwrt也是基于linux,能不能用docker跑一个"debian环境"

试了一下发现还真行,跑通之后整理成文档方便后面的mjj

一、环境准备

首先创建宿主机上的持久化目录:

mkdir -p /mnt/nvme0n1-1/docker-data/debian/etc
mkdir -p /mnt/nvme0n1-1/docker-data/debian/root
mkdir -p /mnt/nvme0n1-1/docker-data/debian/var

[!NOTE]
这里请根据你自己的目录创建,我这里的/mnt/nvme0n1-1/是我挂载在软路由上的一块nvme固态
请根据你自己的情况创建路径

这三个目录将分别挂载为容器的:

  • /etc → 系统配置文件(用户、apt 源)
  • /var → apt 包缓存、数据库、日志
  • /root → 用户环境与配置文件

二、提取系统初始文件

为了让debian容器的数据持久化我们在第一步创建了本地的目录
但是 Docker 的挂载是覆盖,而不是合并,直接运行容器会直接读取我们刚刚创建的空目录。
所以要让容器正常运行,我们首先要复制原生 Debian 系统目录结构到本地。

  1. 启动临时容器:

    docker run -it --name debian-temp debian:12 bash
    
  2. 在宿主机执行复制操作:

    docker cp debian-temp:/etc/. /mnt/nvme0n1-1/docker-data/debian/etc
    docker cp debian-temp:/var/. /mnt/nvme0n1-1/docker-data/debian/var
    docker cp debian-temp:/root/. /mnt/nvme0n1-1/docker-data/debian/root
    
  3. 验证内容是否复制成功:

    ls /mnt/nvme0n1-1/docker-data/debian/etc/apt
    ls /mnt/nvme0n1-1/docker-data/debian/var/lib
    

✅ 若能看到文件,则复制成功。

  1. 删除临时容器:

    docker rm -f debian-temp
    

[!NOTE]
注意这里的路径需要和第一步创建的一致


三、创建 docker-compose 配置文件

路径:/mnt/nvme0n1-1/docker-data/debian/docker-compose.yml

services:
  debian:
    container_name: debian
    image: debian:12
    hostname: debian-box
    command: bash -c "tail -f /dev/null"
    restart: unless-stopped
    privileged: true
    network_mode: host
    dns:
      - 8.8.8.8
      - 1.1.1.1  # 根据你的网络环境设置DNS
      # - 223.5.5.5
    volumes:
      - /mnt/nvme0n1-1/docker-data/debian/etc:/etc
      - /mnt/nvme0n1-1/docker-data/debian/var:/var
      - /mnt/nvme0n1-1/docker-data/debian/root:/root

启动容器:

cd /mnt/nvme0n1-1/docker-data/debian
docker compose up -d

四、进入容器并更新系统

docker exec -it debian bash
apt update && apt upgrade -y

五、设置分辨提示符

为了避免在SSH中混淆宿主机iStoreOS和容器Debian,可以给设置一个提示符

echo 'export PS1="\[\e[31m\][DEBIAN]\[\e[0m\] \u@\h:\w\\$ "' >> ~/.bashrc
source ~/.bashrc

效果示例:

PixPin_2025-10-03_11-51-13

这样我们就可以直观的分辨当前执行在debian容器中还是宿主机,避免误操作


六、创建快捷命令

为了更加快速方便的进入到debian容器中,不用每次都docker exec
我们可以创建一个快捷命令

  1. 宿主机中创建脚本文件

    touch /usr/bin/debian
    
  2. 使用vim或任何你熟悉的编辑器编辑该文件

     #!/bin/sh
     if ! docker ps --format '{{.Names}}' | grep -q '^debian$'; then
       echo "Debian 容器未运行,正在启动..."
       cd /mnt/nvme0n1-1/docker-data/debian || exit 1
       docker compose up -d
       sleep 2
     fi
     docker exec -it debian bash
    

    如果不会使用编辑器也可以使用下面的一键命令

    cat <<'EOF' > /usr/bin/debian
     #!/bin/sh
     if ! docker ps --format '{{.Names}}' | grep -q '^debian$'; then
     echo "Debian 容器未运行,正在启动..."
     cd /mnt/nvme0n1-1/docker-data/debian || exit 1
     docker compose up -d
     sleep 2
     fi
     docker exec -it debian bash
     EOF
    

    注意修改路径为自己的路径

  3. 赋予执行权限

    chmod +x /usr/bin/debian
    

这样每当我们想进入debian容器内,只需要在宿主机上输入debian即可

PixPin_2025-10-03_12-08-14


✅ 最终效果

这样,你就得到了一个基于Docker的Debian"虚拟机"容器,可以更方便的运行一些脚本等
基于这种玩法,你甚至还可以装一个VNC和桌面(如果你的配置足够)
也可以将宿主机的某些目录映射过来,在容器中跑一些脚本

关于配置和占用方面,基础 Debian 容器 启动后内存只占用大约 20–40 MB
启动后仅运行 tail -f /dev/null,CPU 几乎为 0%
因为使用 network_mode: host,没有 NAT 和虚拟网桥损耗;
I/O 走宿主机文件系统直通,读写速度和宿主一致;
几乎等同于裸机运行 Debian 命令行环境。

发帖突然发现论坛 Markdown 代码块的语言提示在预览中可以正常显示,
发帖就没有了,这是BUG吗 @酒神

12
  • 鸡腿已给,但还是想评论一句:有屁非要脱裤子放

  • docker跑万物 yct007

  • 还可以补充 安装vpc

  • 关于提到的问题,可以粘贴出问题的markdown为txt到pastebin/gist类的网页软件,发我一份看看

  • 开小鸡

  • @Wiziscool #0

    Docker使用的是宿主机的内核,因此不能算是真正意义上的VM

  • 你为什么要在openwrt的docker跑debian?
    为了在debian下跑docker!

12

你好啊,陌生人!

我的朋友,看起来你是新来的,如果想参与到讨论中,点击下面的按钮!

📈用户数目📈

目前论坛共有43669位seeker

🎉欢迎新用户🎉