- 原 apk del tzdata 导致容器 UTC, 定时任务无法在 00:00 触发 - 保留 tzdata 并设置 ENV TZ=Asia/Shanghai (Go time 库依赖) Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
48 lines
1.5 KiB
Docker
48 lines
1.5 KiB
Docker
# 宿舍电费监控 - 多阶段构建
|
||
# 阶段1: 编译 Go 静态二进制
|
||
FROM golang:1.22-alpine AS builder
|
||
WORKDIR /build
|
||
# 复制源码(go:embed 需要 static/ 在同一构建上下文)
|
||
COPY go.mod ./
|
||
COPY *.go ./
|
||
COPY static/ ./static/
|
||
# CGO_ENABLED=0 纯静态编译,适用于 scratch/alpine 运行
|
||
RUN CGO_ENABLED=0 GOOS=linux go build -trimpath -ldflags="-s -w" -o electric-monitor .
|
||
|
||
# 阶段2: 最小运行镜像
|
||
FROM alpine:3.20
|
||
# 时区: 定时任务需按北京时间 00:00 触发
|
||
# 保留 tzdata 并设置 TZ 环境变量 (Go time 库依赖它,apk del 会导致 UTC)
|
||
ENV TZ=Asia/Shanghai
|
||
RUN apk add --no-cache tzdata \
|
||
&& cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
|
||
&& echo "Asia/Shanghai" > /etc/timezone
|
||
# 数据目录(历史记录 + 缓存挂载点)
|
||
RUN mkdir -p /app/data
|
||
WORKDIR /app
|
||
COPY --from=builder /build/electric-monitor .
|
||
|
||
# 端口与健康检查
|
||
EXPOSE 8000
|
||
HEALTHCHECK --interval=30s --timeout=5s --retries=3 \
|
||
CMD wget -qO- http://127.0.0.1:8000/api/electric > /dev/null || exit 1
|
||
|
||
# 数据持久化卷
|
||
VOLUME ["/app/data"]
|
||
|
||
# 默认值(可由 docker-compose/.env 覆盖;账号密码与加密密钥必须由运行环境注入)
|
||
ENV HOST=0.0.0.0 \
|
||
PORT=8000 \
|
||
LZU_USERNAME= \
|
||
LZU_PASSWORD= \
|
||
LZU_SERVICE_ID=29615 \
|
||
XF_PLATFORM=QHIT_EDU \
|
||
XF_AUTH_APPID=2606161276416311297 \
|
||
XF_SCHOOL_CODE=10730 \
|
||
XF_YM_APPID=1810181825222034 \
|
||
CACHE_FILE=/app/data/electric_cache.json \
|
||
HISTORY_FILE=/app/data/electric_history.json \
|
||
XF_CACHE_TTL=518400
|
||
|
||
CMD ["./electric-monitor"]
|