0%

构建自己的Docker镜像(用于编译Lineage 18.1)

概述

docker-lineage-cicd启动后会自动同步代码并编译,需要指定的参数也比较多,于是考虑制作自己的Docker镜像,用于编译Lineage 18.1

项目见docker-lineage

步骤

Dockerfile

参考docker-lineage-cicd/Dockerfile
仅保留sourceccache两个目录映射,精简不必要的依赖,替换cronvim,使用TUNArepo,最后执行entrypoint设置的脚本

docker_entrypoint.sh

设置ccache大小和git帐号,最后进入bash

build

1
2
docker build --network=host \
-t xhyeax/docker-lineage:v18.1 .

为使用本地的http代理安装依赖,网络选择host模式

run

1
2
3
4
5
export ANDROID_VOL=/media/xhy/a5d37cc9-d3a3-43c8-909d-178d70a6598c/Android
docker run --privileged -it \
-v "$ANDROID_VOL/source:/srv/src" \
-v "$ANDROID_VOL/ccache:/srv/ccache" \
xhyeax/docker-lineage:v18.1

push

可以使用VSCodeDocker插件,将镜像上传到Docker Hub

遇到的问题

build 卡在 tzdata Geographic area:

Dockerfile中设置环境变量:

1
ENV DEBIAN_FRONTEND=noninteractive

docker_entrypoint.sh Permission denied

给脚本增加可执行权限,重新build

编译时permission denied

启动容器时增加--privileged

docker_entrypoint.sh执行后退出

原因:未运行前台应用,容器自动关闭
可增加-d参数启动容器
或在docker_entrypoint.sh脚本末尾增加进入Shell的命令

1
2
3
4
5
6
args="$@"
if [ -z "$args" ]; then
args="bash"
fi

exec sudo -E args

参考

How to fix ‘Configuring tzdata’ interactive input when building Docker images