grep -rl "@TERMUX_PREFIX@" . | xargs sed -i "s|@TERMUX_PREFIX@|/data/data/com.termux/files/usr|g"




wget https://dl.google.com/android/repository/android-ndk-r27d-linux.zip?hl=zh-cn




# Android 平台 Docker 全家桶适配与编译指南

本指南详细记录了如何通过修改源码和交叉编译,将 Docker 核心组件完美移植到 Android 环境,并实现日志零报错。

## 1. 环境准备 (Ubuntu 编译机)

在 Ubuntu 上配置交叉编译环境:


# 安装 Go 环境 (建议 1.18+)
sudo apt update && sudo apt install golang-go git -y

# 设置 Android 交叉编译环境变量
export GOOS=android
export GOARCH=arm64
export CGO_ENABLED=0 # 保证二进制文件无动态链接依赖


## 2. 源码下载与组件版本对照

为了最佳兼容性,我们采用以下版本组合:

|**组件**|**源码仓库**|**推荐版本**|
|---|---|---|
|**containerd**|`containerd/containerd`|v1.6.21|
|**dockerd**|`moby/moby`|v20.10.24|
|**docker (cli)**|`docker/cli`|v20.10.24|
|**docker-proxy**|`libnetwork`|对应 moby 版本|
|**runc**|`opencontainers/runc`|v1.1.7|

---

## 3. 核心修补与插件“物理切除”

这是实现日志纯净的关键步骤。

### A. containerd 适配 (重点)

1. **屏蔽无用插件**:在以下文件第一行添加 `//go:build ignore` 标签:

- `cmd/containerd/builtins_zfs_linux.go`

- `cmd/containerd/builtins_aufs_linux.go`

- `tracing/plugin/otlp.go` (需进入目录处理)

2. **断开入口引用**:打开 `cmd/containerd/builtins_linux.go`,注释掉:

Go

// _ "github.com/containerd/containerd/tracing/plugin"
    
3. **编译命令**:

Bash

go build -v -trimpath \ -tags "no_btrfs no_devmapper no_zfs no_aufs" \ -ldflags "-X github.com/containerd/containerd/version.Version=1.6.21 -w -s" \ -o bin/containerd ./cmd/containerd
    

### B. dockerd (Moby) 适配

1. **路径硬编码修改**:在 `daemon/config/config.go` 中搜索 `/var/lib/docker`,改为 `/data/docker/lib/docker`。

2. **编译命令**:

Bash

go build -v -trimpath \ -tags "exclude_graphdriver_btrfs exclude_graphdriver_devicemapper exclude_graphdriver_aufs" \ -ldflags "-X github.com/docker/docker/dockerversion.Version=20.10.24 -w -s" \ -o bin/dockerd ./cmd/dockerd
    

### C. docker-proxy 适配

直接从 `moby/libnetwork` 编译:

Bash


go build -v -trimpath -ldflags "-w -s" -o bin/docker-proxy github.com/docker/libnetwork/cmd/proxy


### D. containerd-shim-runc-v2

Bash


go build -v -trimpath -ldflags "-w -s" -o bin/containerd-shim-runc-v2 ./cmd/containerd-shim-runc-v2


---

## 4. 运行配置 (Android 端)

### A. 准备目录与配置文件

在手机端创建工作目录:

Bash


mkdir -p /data/docker/lib/docker
mkdir -p /data/docker/run/docker


创建 `/data/docker/daemon.json`:

JSON


{
"data-root": "/data/docker/lib/docker",
"exec-root": "/data/docker/run/docker",
"pidfile": "/data/docker/run/docker.pid",
"hosts": ["unix:///data/docker/run/docker.sock"],
"storage-driver": "overlay2",
"group": "0"
}


### B. 启动脚本 (ds.sh)

#!/system/bin/sh
export PATH=$PATH:/data/docker/bin
export DOCKER_HOST=unix:///data/docker/run/docker.sock

# 解决 cgroup 警告
mkdir -p /sys/fs/cgroup/devices
mount -t cgroup -o devices cgroup /sys/fs/cgroup/devices 2>/dev/null

# 启动守护进程
dockerd --config-file /data/docker/daemon.json &