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
本指南详细记录了如何通过修改源码和交叉编译,将 Docker 核心组件完美移植到 Android 环境,并实现日志零报错。
在 Ubuntu 上配置交叉编译环境:
sudo apt update && sudo apt install golang-go git -y
export GOOS=android export GOARCH=arm64 export CGO_ENABLED=0
为了最佳兼容性,我们采用以下版本组合:
|**组件**|**源码仓库**|**推荐版本**| |---|---|---| |**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|
---
这是实现日志纯净的关键步骤。
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"
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 &
|