ezBookkeeping 1.3.2 docker 安装 - 个人记账应用
前言
一直使用的是“随手记”的应用,但总感觉有些东西还是需要自己部署、自己掌握数据会更安全。随手记本身是不支持私人部署的,所以让 deepseek 推荐了一款叫 ezBookkeeping 的个人记账应用。
docker 安装 ezBookkeeping
和之前一样的毛病,直接拉取官方的镜像是拿不到的,会报错连接不到 dockerhub 库:
docker run -p8080:8080 mayswind/ezbookkeeping
Unable to find image 'mayswind/ezbookkeeping:latest' locally
docker: Error response from daemon: Get "https://registry-1.docker.io/v2/": net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)
Run 'docker run --help' for more information所以还是走以前的路线,本地拉取服务器版本(amd64)的镜像,然后打成压缩包上传到服务器,再载入到镜像库。这里取最新的稳定版 1.3.2。
docker pull --platform linux/amd64 mayswind/ezbookkeeping:1.3.2
docker save -o ezbookkeeping-1.3.2.tar mayswind/ezbookkeeping:1.3.2
# 上传到服务器,载入
docker load -i ezbookkeeping-1.3.2.tar
docker run -p8080:8080 mayswind/ezbookkeeping:1.3.2本地 docker desktop 需要在配置里开启 Virtual Machine Options - Apple Virtualization framework - Use Rosetta for x86_64/amd64 emulation on Apple Silicon。
本来到这里就结束了,但为了让 https-portal (自动解析域名、添加 SSL 访问,反向代理)将域名代理映射到当前的服务,需要将其改成 docker compose 模式,并添加共享网络(不然解析不到服务名)。
启动之后,注册一个新的账号作为管理员,但注册功能还在。想要关闭对外注册功能,后台没有找到配置的地方,deepseek 给了一个错误的 EBK_USER_ENABLE_REGISTRATION=false 配置,导致过程中浪费了一些时间。这应该是没有更新读取最新的 ezBookkeeping 文档导致的。实际应该是 EBK_USER_ENABLE_REGISTER=false。
之后想要修改应用名称,但 EBK_GLOBAL_APP_NAME=xxx 也不生效,找了一下新版本里可能没有开放。想着干脆将现有的应用配置文件映射出来,有需要就从配置里找更靠谱一下。于是有了下面的这个:
services:
ezbookkeeping:
image: mayswind/ezbookkeeping:1.3.2
container_name: ezbookkeeping
restart: unless-stopped
ports:
- "8080:8080"
volumes:
- /root/ezBookkeeping_project/data:/ezbookkeeping/data
- /root/ezBookkeeping_project/storage:/ezbookkeeping/storage
#- /root/ezBookkeeping_project/conf:/ezbookkeeping/conf
environment:
- EBK_GLOBAL_APP_NAME=随手记
- EBK_USER_ENABLE_REGISTER=false
- EBK_SECURITY_SECRET_KEY=8XXpnVU7G1SGz6UoavEb9XaGPl68W8lrCYKuYbbf9WY=
networks:
- internal
- shared
networks:
internal:
driver: bridge
shared:
external: true
name: shared-servicesdata 是数据存储目录,storage 是上传文件目录,还有一个配置文件。
因为目录启动本地为空,导致找不到配置文件 ezbookkeeping.ini 会报错。手动创建一个也会因为配置不全导致其他报错,此时需要先去掉配置目录映射,启动后从容器中复制一份出来,再重新生成服务。
docker compose up -d
docker cp ezbookkeeping:/ezbookkeeping/conf/ezbookkeeping.ini conf/
docker compose down
# 添加上配置目录,再启动
docker compose up -d之后需要从“随手记”导出数据,而导出数据需要会员才能使用,不得已开了一个月的会员。
移动端访问
测试默认扫描访问的地址是 http://localhost:8080,需要修改调整。
一开始是按照实际的去修改 ini 配置文件,结果重新生成容器失败报错:
protocol = https
http_addr = 139.224.207.215
http_port = 8080
domain = xx.seasidecrab.com
重新生成容器报错:
2026-03-23 03:25:54 [INFO] [webserver.startWebServer] will run at https://139.224.207.215:8080
2026/03/23 03:25:54 Failed to run ezBookkeeping with [/ezbookkeeping/ezbookkeeping server run]: listen tcp 139.224.207.215:8080: bind: cannot assign requested address
2026-03-23 03:25:54 [ERROR] [webserver.startWebServer] cannot start, because listen tcp 139.224.207.215:8080: bind: cannot assign requested address这个错误是因为你在配置中指定了 http_addr = 139.224.207.215(公网 IP),但容器内部无法绑定到这个 IP 地址。
情况确实是这样的,已经在共享网络中的 https-portal 服务中配置了 xx.seasidecrab.com -> http://ezbookkeeping:8080,指向了服务的 8080 端口,此时修改配置:
protocol = http
http_addr = 0.0.0.0
http_port = 8080
domain = xx.seasidecrab.com
root_url = https://xx.seasidecrab.com/再次重新生成,OK!
移动端通过微信扫码然后浏览器打开,之后 添加至桌面,会生成一个桌面的应用图标。
历史数据导入
文档里 导出 & 导入 说明是支持“随手记”数据导入的,但实际下拉并没有找到。这是因为下拉的文件类型是二级分类,“随手记”在“其他金融文件格式”中。
对应有 App、Web、神象云账本三种类型,我的消费账本属于神象云账本,导出的是 .xlsx 格式的 excel 文件。
导入按钮鼠标悬浮上去,会有导出的两种类型选择,页面上没有单独的导出按钮。导出前需要添加好对应的账户、交易类型和交易标签,其中交易类型是初始化时默认生成的,跟“随手记”中的类型有区别,需要修改保持一致才能正确导入。我这里选择添加了几项,然后调整导出的 excel 中分类和子分类,将其修改成新的分类。
注意:导出的分类名后面会有空格,使用 App 导出还是存在。可以选中列 Ctrl+H 然后查找内容输入空格,替换为留空,然后全部替换。当然这需要分类中间没有空格,不然也会被干掉。
因为历史数据也会影响最终的账户余额,而之前记账没有添加收入部分,所以新建了一个账户,然后每次导入后添加一笔当年(“随手记”导出最长为一年)的对冲收入,确保当前账户数据不受影响。
最终效果图:

本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。
海滨擎蟹
微信
支付宝