导出数据库
```bash
docker exec -t 1Panel-postgresql-yUaf \
pg_dump -Fc -U affine affine \
> affine_full.dump
```
这个命令才对
```bash
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/
```
导入数据库
```bash
docker exec -i 1Panel-postgresql-UwJg \
pg_restore -U affine -d affine \
< /opt/1panel/apps/affine/affine_full.dump
```
```bash
docker exec -i 1Panel-postgresql-UwJg \
pg_restore -U affine -d affine \
< /opt/1panel/apps/affine/affine_full.dump
```
```bash
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**。
---
## 一、错误的本质(一句话)
```text
service "affine" refers to undefined network 1panel-network
```
👉 **不是 AFFiNE 问题,也不是数据库问题**
👉 **而是你在当前 `docker-compose.yml` 里:**
- 使用了 `networks: - 1panel-network`
- **但文件中已经没有定义这个 network**
---
## 二、你现在两个 compose 的差异(问题点)
### ✅ 原始的 `docker-compose.yml.bak0`(是对的)
```yaml
networks:
1panel-network:
external: true
```
这个声明告诉 Docker:
> “这个网络已经存在(由 1Panel 创建),我只是用它”
---
### ❌ 你现在在用的 `docker-compose.yml`(少了这一段)
```yaml
services:
affine:
...
networks:
- 1panel-network
```
但 **没有**:
```yaml
networks:
1panel-network:
external: true
```
👉 所以 Docker 直接报:
**引用了一个不存在的 network**
---
## 三、你现在需要做的「唯一正确修改」
> **保留 network 声明,只删除 migration 相关内容**
### ✅ 正确的 `docker-compose.yml`(完整可用版)
👉 **请你直接整体替换当前文件内容**
```yaml
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_migration` service
- ❌ 删除 `depends_on`
---
## 四、改完以后你要这样操作(顺序照抄)
```bash
# 1. 确保没有残留容器
docker compose down -v
# 2. 再保险一点(可选)
docker rm -f affine affine_migration_job 2>/dev/null || true
# 3. 启动
docker compose up -d
```
---
## 五、启动成功的“标准结果”
### 1️⃣ 查看容器状态
```bash
docker compose ps
```
你应该看到类似:
```text
affine Up 0.0.0.0:3010->3010/tcp
```
**不应该再看到:**
- `affine_migration_job`
- `Waiting`
- `Starting` 卡住
---
### 2️⃣ 看日志(确认没坑)
```bash
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 声明也删掉了**
补回它,就结束了。
---