部署与启动
容器起不来 / 升级问题 / 端口冲突 / 数据卷
容器起来又退出
先看日志, 错误信息会写得很清楚:
docker compose logs imagic --tail=100下面是几种常见报错对应的解决方向。
Redis 连不上
Imagic 启动时会检查 Redis 是否可用, 不通就直接退出。
- 如果你用的是 一键启动 里的 compose 模板, 一般不会出问题; 偶发性可以先
docker compose down && docker compose up -d重启一次 - 用了外接的云 Redis, 检查地址 / 密码 / 网络白名单是不是对的, 详见 外接 Redis
- TLS 加密的 Redis 地址要写成
rediss://(注意双 s), 不是redis://
数据库连不上
仅在用 Postgres 时会遇到。
- 用 compose 内置的 PG 容器, 一般是密码两边没对齐 —
imagic服务里DB_DSN的密码必须跟db服务的POSTGRES_PASSWORD一致 - 用外接的云数据库, 检查白名单有没有放行你服务器的 IP, 详见 外接 PostgreSQL
- SQLite 模式下报"数据库错误", 多半是数据卷权限问题, 见下面"数据卷权限错误"
Postgres 反复重启, 报 Operation not permitted
仅在用 compose 内置的 PG 容器时会遇到。数据库日志 (docker compose logs db --tail=50) 里能看到类似:
LOG: could not write to file "postmaster.pid": Operation not permitted
ERROR: could not access status of transaction 0
DETAIL: Could not write to file "pg_xact/0000" at offset 0: Operation not permitted
FATAL: checkpoint request failed常见于 CentOS 7 等老系统 (执行 uname -r, 版本号以 3. 开头的就是)。
新版 Postgres 镜像在老内核上会被 Docker 默认的安全策略拦下写文件操作,
往往是某次 docker compose pull 更新镜像之后突然出现, 之前一直好好的。
数据本身没有坏, 不要删数据目录, 也不要执行任何"重置 / 修复"类命令。
解决: 在 docker-compose.yml 的 db 服务下加两行:
services:
db:
image: postgres:17-alpine
security_opt:
- seccomp:unconfined
# 其它配置保持不变然后 docker compose up -d, 日志出现 database system is ready to accept connections 即恢复,
imagic 会随后自动启动。
- 这个设置只作用于数据库容器, compose 模板里数据库没有对外暴露端口, 影响可控
- 如果 Redis 或 imagic 容器之后也出现同样的
Operation not permitted, 是同一个原因, 同样处理 - 与宝塔 / 云厂商安全防护无关, 排查时不需要去关这些防护
- 长期建议把系统升级到 Rocky Linux 9 / Alibaba Cloud Linux 3 / Ubuntu 22.04 等仍在维护的版本, CentOS 7 已停止维护, 以后还会有更多新镜像在上面出类似问题
端口被占了
默认占用 8080 端口。如果服务器上 8080 已经有别的服务, 在 docker-compose.yml 改映射:
ports:
- "9090:8080"冒号前面是宿主机端口 (浏览器 / 反代访问的), 后面 8080 不要动 (容器内固定)。
License 错误
见 License 授权。
拉镜像很慢 / 卡住
国内服务器拉 Dockerhub 经常很慢甚至超时, 给 Docker 配个镜像加速器:
# 编辑 /etc/docker/daemon.json (没有就新建)
{
"registry-mirrors": [
"https://docker.m.daocloud.io",
"https://hub.atomgit.com"
]
}保存后重启 Docker: systemctl restart docker, 再 docker compose pull 就快了。
如果服务器封到没法访问 Dockerhub, 可以在能访问的机器上拉镜像后转存:
# 能联网的机器
docker pull woodchen/imagic:latest
docker save -o imagic.tar woodchen/imagic:latest
# scp imagic.tar 到目标服务器后
docker load -i imagic.tar升级后页面没变化
正常 docker compose pull && docker compose up -d 应该就拉到新版了。如果发现还是旧界面:
- 浏览器强刷一次 (Ctrl + Shift + R)
- 检查
docker-compose.yml里image:是不是固定到了某个旧版本号 - 实在不行
docker compose down && docker compose pull && docker compose up -d整套重来
注意: License 已过期时无法升级, 见 License 授权。
改了设置但前端没反应
绝大多数后台设置改完即时生效, 不需要重启。看不到新值:
- 浏览器强刷 (Ctrl + Shift + R)
- 退出登录重新登录
- 检查保存时是不是有红色错误提示 (字段格式错误)
支付凭证 / 邮箱 SMTP 这种, 最好改完立刻测一笔真实订单 / 让朋友收一封验证码, 比看后台保存成功更可靠。
数据卷权限错误
少数 Linux 系统上挂载本地目录会报 Permission denied。imagic 容器内以普通用户身份运行, 主机上的数据目录需要让这个用户有读写权限:
sudo chown -R 1000:1000 ./data执行完重启 imagic 容器即可。
时区不对 / 仪表盘"今日"算错
镜像默认中国时区 (UTC+8)。如果你的业务在别的时区, 在 docker-compose.yml 给 imagic 加:
services:
imagic:
environment:
TZ: "America/Los_Angeles" # 改成你想要的时区改完 docker compose up -d 重启。已经发生过的数据不会变, 后续的统计 / 跨日按新时区。