基于 docker 容器进行修改并成新镜像

0.背景和需求

背景

有时会需要使用 battery-historian 解析日志,很久之前使用以下命令本地部署过一次。

1
docker -- run  -v /usr/share/zoneinfo:/usr/share/zoneinfo -p 8855:9999 gcr.io/android-battery-historian/stable:3.0 --port 9999 >> ~/battery_historian.log 2>&1 &
  • -v /usr/share/zoneinfo:/usr/share/zoneinfo:设置为本地时区。
  • 8888:是端口号,访问 http://127.0.0.1:8888/ 或本机 ip:8888 就可以使用 Battery Historian 了。
  • >>~/battery_historian.log 2>&1 &:任何输出追加写入文件,并后台运行。

需求

gcr.io/android-battery-historian 这个镜像存在一些问题,需要修改部分代码。

  • 问题一:由于 bugreport 数据类型/格式不对,偶现各种解析错误,需要做一些新的适配和规避。
  • 问题二:其中使用的部分 js 来自 cdn,偶尔网络抽风,无法加载,需要将 cdn 资源本地储存,并替换链接。

按道理可以直接修改 battery-historian 源码并编译,但这个项目已经多年没人维护,其中使用的各种依赖版本都非常老(尤其是前端的部分),折腾一通勉强跑起来了,由于编译环境差异还是有些日志解析的有问题。

所以只能退而求其次,基于 gcr.io/android-battery-historian/stable:3.0 来修改了。

1.修改容器

进入容器查看文件

1
docker exec -it 0952b5bff193 /bin/bash

将 docker 容器中的文件,拷贝到本地进行修改

1
2
docker cp 0952b5bff193:/gopure/src/github.com/google/battery-historian/setup.go .
docker cp 0952b5bff193:/gopure/src/github.com/google/battery-historian/templates/base.html .

将修改好的文件,拷贝到 docker 容器中

1
2
3
docker cp setup.go 0952b5bff193:/gopure/src/github.com/google/battery-historian/
docker cp base.html 0952b5bff193:/gopure/src/github.com/google/battery-historian/templates/
docker cp cdn 0952b5bff193:/gopure/src/github.com/google/battery-historian/third_party/

重启容器

1
docker restart 09

2.生成镜像

基于容器生成新的镜像

1
docker commit 0952b5bff193 battery-historian:end

3.分享

保存镜像,方便分享给其他人

1
docker save -o battery-historian.tar battery-historian:end

其他人拿到镜像,加载镜像并启动容器

1
2
3
docker load -i battery-historian.tar
docker -- run -v /usr/share/zoneinfo:/usr/share/zoneinfo -p 8888:9999 battery-historian:end --port 9999 > /dev/null 2>&1 &
# 8888:是端口号,访问 http://127.0.0.1:8888/ 或本机 ip:8888 就可以使用 Battery Historian 了。

基于 docker 容器进行修改并成新镜像
https://www.aimtao.net/modified-container/
Posted on
2025-08-31
Licensed under