Imagic / 妙绘
常见问答

部署与启动

容器起不来 / 升级问题 / 端口冲突 / 数据卷

容器起来又退出

先看日志, 错误信息会写得很清楚:

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 重启。已经发生过的数据不会变, 后续的统计 / 跨日按新时区。

On this page