导出数据库
docker exec -t 1Panel-postgresql-yUaf \
pg_dump -Fc -U affine affine \
> affine_full.dump
这个命令才对
docker exec 1Panel-postgresql-yUaf \
pg_dump -Fc -U affine affine \
> /root/affine_full.dump
scp /root/affine_full.dump hk3:/opt/1panel/apps/affine/
导入数据库
docker exec -i 1Panel-postgresql-UwJg \
pg_restore -U affine -d affine \
< /opt/1panel/apps/affine/affine_full.dump
docker exec -i 1Panel-postgresql-UwJg \
pg_restore -U affine -d affine \
< /opt/1panel/apps/affine/affine_full.dump
root@hh7343277330029:/opt/1panel/apps/affine# ls
affine affine_data_full.tar.gz affine_full.dump
root@hh7343277330029:/opt/1panel/apps/affine# rm affine_full.dump -rf
root@hh7343277330029:/opt/1panel/apps/affine# ls
affine affine_data_full.tar.gz affine_full.dump
root@hh7343277330029:/opt/1panel/apps/affine# ls -lh
总计 53M
drwxr-xr-x 6 root root 4.0K 2月 22 22:11 affine
-rw-r--r-- 1 root root 43M 2月 22 22:07 affine_data_full.tar.gz
-rw-r--r-- 1 root root 11M 2月 22 22:30 affine_full.dump
root@hh7343277330029:/opt/1panel/apps/affine# docker exec -i 1Panel-postgresql-UwJg \
pg_restore -U affine -d affine \
< /opt/1panel/apps/affine/affine_full.dump
root@hh7343277330029:/opt/1panel/apps/affine#
tar xzvf affine_data_full.tar.gz -C
非常好,你现在这个报错 已经不是 AFFiNE 的坑了,而是一个标准的 Docker Compose 语法/结构问题,而且你已经把关键信息全部给出来了 👍
我直接精确指出你还差哪一步、为什么会报这个错,以及给你一份“可直接用”的 compose。
一、错误的本质(一句话)
service "affine" refers to undefined network 1panel-network
👉 不是 AFFiNE 问题,也不是数据库问题
👉 而是你在当前 docker-compose.yml 里:
-
使用了
networks: - 1panel-network -
但文件中已经没有定义这个 network
二、你现在两个 compose 的差异(问题点)
✅ 原始的 docker-compose.yml.bak0(是对的)
networks:
1panel-network:
external: true
这个声明告诉 Docker:
“这个网络已经存在(由 1Panel 创建),我只是用它”
❌ 你现在在用的 docker-compose.yml(少了这一段)
services:
affine:
...
networks:
- 1panel-network
但 没有:
networks:
1panel-network:
external: true
👉 所以 Docker 直接报:
引用了一个不存在的 network
三、你现在需要做的「唯一正确修改」
保留 network 声明,只删除 migration 相关内容
✅ 正确的 docker-compose.yml(完整可用版)
👉 请你直接整体替换当前文件内容
networks:
1panel-network:
external: true
services:
affine:
container_name: ${CONTAINER_NAME}
image: ghcr.io/toeverything/affine:0.26.2
environment:
- REDIS_SERVER_HOST=${PANEL_REDIS_HOST}
- REDIS_SERVER_PORT=6379
- REDIS_SERVER_PASSWORD=${PANEL_REDIS_ROOT_PASSWORD}
- DATABASE_URL=postgres://${PANEL_DB_USER}:${PANEL_DB_USER_PASSWORD}@${PANEL_DB_HOST}:${PANEL_DB_PORT}/${PANEL_DB_NAME}
- AFFINE_INDEXER_ENABLED=false
volumes:
- ./data/storage:/root/.affine/storage
- ./data/config:/root/.affine/config
ports:
- ${PANEL_APP_PORT_HTTP}:3010
networks:
- 1panel-network
restart: unless-stopped
📌 重点只有三条:
-
✅ 保留
networks: 1panel-network: external: true -
❌ 删除整个
affine_migrationservice -
❌ 删除
depends_on
四、改完以后你要这样操作(顺序照抄)
# 1. 确保没有残留容器
docker compose down -v
# 2. 再保险一点(可选)
docker rm -f affine affine_migration_job 2>/dev/null || true
# 3. 启动
docker compose up -d
五、启动成功的“标准结果”
1️⃣ 查看容器状态
docker compose ps
你应该看到类似:
affine Up 0.0.0.0:3010->3010/tcp
不应该再看到:
-
affine_migration_job -
Waiting -
Starting卡住
2️⃣ 看日志(确认没坑)
docker logs affine --tail 50
正常情况:
-
不再出现
self-host-predeploy -
不再出现
migration -
服务直接启动
六、为什么这一步是“最后一块拼图”
你现在已经满足 AFFiNE 迁移成功的全部条件:
-
✅ 数据库:
pg_dump / pg_restore完整恢复 -
✅
private.key:原实例一致 -
✅ data 目录:完整覆盖
-
✅ 版本:
0.26.2完全一致 -
✅ migration:已正确跳过
-
✅ network:修复完成(这一步)
👉 再启动不成功,才是“玄学问题”
但以你现在这个状态,100% 会起来
七、一句话总结(你已经赢了)
你不是在“调服务”
你是在 把一个完整的 AFFiNE 实例,原样搬到另一台服务器
现在这个错误只是:
删 migration 时,顺手把 network 声明也删掉了
补回它,就结束了。