【教程】免Root在Termux上安装Docker

转载请注明出处:小锋学长生活大爆炸xfxuezhagn.cn

如果本文帮助到了你,欢迎点赞、收藏、关注哦~
来源:https://gist.github.com/oofnikj/e79aef095cd08756f7f26ed244355d62

亲测可用,缺点是很卡

原理

创建一个 Linux 虚拟机,并在其中安装 Docker,这样就可以在 Android 设备上(缓慢地)运行 x86 Docker 容器。

安装

1、安装 QEMU

bash 复制代码
 pkg install qemu-utils qemu-common qemu-system-x86_64-headless wget

2、下载 Alpine Linux 3.12 (virt 优化) ISO

bash 复制代码
 mkdir alpine && cd $_

 wget http://dl-cdn.alpinelinux.org/alpine/v3.12/releases/x86_64/alpine-virt-3.12.3-x86_64.iso

3、创建磁盘(注意,它实际上不会占用 4GB 的空间,而是 500MB)

bash 复制代码
 qemu-img create -f qcow2 alpine.img 4G

这里会涉及虚拟机磁盘的大小,视情况建议设置大一点,比如20GB

4、启动它

bash 复制代码
qemu-system-x86_64 -machine q35 -m 1024 -smp cpus=2 -cpu qemu64 \
  -drive if=pflash,format=raw,read-only,file=$PREFIX/share/qemu/edk2-x86_64-code.fd \
  -netdev user,id=n1,hostfwd=tcp::2222-:22 -device virtio-net,netdev=n1 \
  -cdrom alpine-virt-3.12.3-x86_64.iso \
  -nographic alpine.img

5、使用用户 root(无需密码)登录

6、设置网络(按 Enter 使用默认值)

bash 复制代码
setup-interfaces
bash 复制代码
ifup eth0

7、创建一个answerfile文件以加快安装

bash 复制代码
wget https://gist.githubusercontent.com/oofnikj/e79aef095cd08756f7f26ed244355d62/raw/answerfile

answerfile:

bash 复制代码
KEYMAPOPTS="us us"
HOSTNAMEOPTS="-n alpine"
INTERFACESOPTS="auto lo
iface lo inet loopback

auto eth0
iface eth0 inet dhcp
    hostname alpine
"
TIMEZONEOPTS="-z UTC"
PROXYOPTS="none"
APKREPOSOPTS="http://dl-cdn.alpinelinux.org/alpine/v3.12/main http://dl-cdn.alpinelinux.org/alpine/v3.12/community"
SSHDOPTS="-c openssh"
NTPOPTS="-c busybox"
DISKOPTS="-v -m sys -s 0 /dev/sda"

8、进行一些修补

bash 复制代码
sed -i -E 's/(local kernel_opts)=.*/\1="console=ttyS0"/' /sbin/setup-disk

9、运行安装程序安装到磁盘

bash 复制代码
setup-alpine -f answerfile

注意,最后提示Erase the above disk(s) 时候,默认是 N,直接回车就等于取消了安装,所以磁盘还是空的,需要选 y

10、安装完成后,关闭虚拟机

bash 复制代码
poweroff

输入后等一会,会有调试信息输出,直到输出"reboot: Power down"

11、重新启动,不使用 CD-ROM

bash 复制代码
qemu-system-x86_64 -machine q35 -m 1024 -smp cpus=2 -cpu qemu64 \
  -drive if=pflash,format=raw,read-only,file=$PREFIX/share/qemu/edk2-x86_64-code.fd \
  -netdev user,id=n1,hostfwd=tcp::2222-:22 -device virtio-net,netdev=n1 \
  -hda  alpine.img \
  -nographic 

建议把这个存为sh脚本,方便以后启动虚拟机。

参数说明:

参数 值/子参数 说明
qemu-system-x86_64 - 启动 x86_64 架构的 QEMU 系统模拟器
-machine q35 使用 Intel Q35 芯片组(较新,支持 PCIe、UEFI)。替代旧版 pc(i440FX),推荐用于现代系统
-m 1024 分配 1024 MB(1GB)内存给虚拟机。视情况可增加。
-smp cpus=2 设置 2 个 CPU 核心。视情况可增加。
-cpu qemu64 使用通用的 qemu64 CPU 模型(兼容性好,性能一般)。可选 host(KVM 下用宿主机 CPU)、max(最大特性)
-drive if=pflash 驱动器接口类型为 pflash(PCI Flash,用于 UEFI 固件)
-drive format=raw 镜像格式为原始裸格式(无压缩/快照功能)
-drive read-only 只读挂载(固件不应被修改)
-drive file=$PREFIX/... UEFI 固件文件路径($PREFIX 通常是 /usr)
-netdev user 用户模式网络(无需 root,NAT 方式)
-netdev id=n1 网络设备标识符,供后续引用
-netdev hostfwd=tcp::2222-:22 端口转发:宿主机 2222 → 虚拟机 22(SSH)
-device virtio-net 使用 VirtIO 半虚拟化网卡(高性能)
-device netdev=n1 关联到上面定义的 netdev n1
-hda alpine.img 第一块硬盘镜像(IDE 接口,旧式)。等同于 -drive file=alpine.img,index=0,media=disk
-nographic - 禁用图形界面,使用纯串口控制台。输出重定向到当前终端,适合无 GUI 环境

12、安装 docker 并在启动时启用

bash 复制代码
apk update && apk add docker && apk add docker-compose
service docker start
rc-update add docker

一些快捷键:

  • Ctrl+a x: 关闭模拟器
  • Ctrl+a h: 启动 QEMU 控制台

装OpenClaw

Alpine Linux Docker 换源:

bash 复制代码
#!/bin/sh
# Alpine Linux Docker 换源脚本

echo "=== 配置 Docker 镜像加速器 ==="

# 创建配置目录
mkdir -p /etc/docker

# 写入配置
cat > /etc/docker/daemon.json << 'EOF'
{
    "registry-mirrors": [
        "https://docker.xuanyuan.me",
        "https://docker.m.daocloud.io",
        "https://docker.1ms.run"
    ]
}
EOF

echo "=== 重启 Docker 服务 ==="
rc-service docker restart

echo "=== 验证配置 ==="
sleep 2
docker info 2>/dev/null | grep -A 5 "Registry Mirrors" || echo "Docker 可能未运行,请检查:rc-service docker status"

echo "=== 完成 ==="

参看:https://github.com/justlovemaki/OpenClaw-Docker-CN-IM/

相关推荐
AOwhisky2 小时前
Linux(CentOS)系统管理入门笔记(第二十一期)——防火墙管理(Firewalld)——zone、服务端口、富规则与端口转发
linux·运维·笔记·安全·centos·防火墙
腾飞开源2 小时前
01_K8s干货笔记之认识K8s
运维·笔记·云原生·容器·kubernetes·k8s·容器化部署
布鲁飞丝8 小时前
vivo Pulsar 万亿级消息处理实践()-Ansible运维部署
运维·ansible
XR1234567889 小时前
企业全光网络架构选型技术白皮书:从物理层到运维层的全链路分析
运维·网络·架构
HiDev_9 小时前
【非标自动化】2、认识元器件(直线模组)
运维·自动化
龙仔72510 小时前
人大金仓 KingbaseES V8 只读账号创建完整运维笔记
运维·笔记·sql·人大金仓
我不管我就要叫小猪10 小时前
嵌入式Linux----网络通信
linux·运维·服务器
江湖有缘11 小时前
Docker实战 :使用Docker部署OneTerm堡垒机
运维·docker·容器
姜太小白11 小时前
【Linux】df -h 卡住问题的通用排查与解决方案总结
linux·运维·php
张忠琳11 小时前
【NPU】Ascend Docker Runtime v26.0.1 之二 runtime/process/process.go — 超深度逐行分析
云原生·容器·架构·kubernetes·npu·docker-runtime