【解决方案+脚本】 Docker Koishi 遇到的 Onebot 1200 问题

最近在操作Bot的时候看到了在发送文件的时候有概率出现1200 (文件未找到)的错误。

2025-08-11 22:36:23 [W] session Error: Error with request send_group_msg, args: {"group_id":137858995,"message":[{"type":"image","data":{"file":"file:///koishi/data/bap-active/list_cn_1.png","cache":0}}]}, retcode: 1200

Ref: 有关docker版koishi发送图片的问题

我昨天研究了一下还真的解决了问题。

分两种情况

1. Docker Koishi / Docker Napcat 在一台机器上

我的猜测是 你只需要把/koishi/data映射到主机即可,Napcat也映射到这个data文件夹 应该没有什么问题。

2. Docker Koishi / Docker Napcat 不在同一台机器上

我就是这样的情况,Napcat服务器在上海,而Koishi服务器在美国。File Not Found就代表在Napcat这个机器上面没有找到Koishi所提供文件的路径。
你也可以听我讲讲原理,或者直接使用最下面的脚本也可以

Step 1

先做好上海机器的备份,一般保留凭据和Token就行

Step 2

在上海机器mkdir 做出 /docker/koishi/data

mkdir -p /docker/koishi/data

Step 3

做一下rsync测试

rsync -avz --delete -e 'ssh -p 22' username@your_ip:$your_external_server_path/ /data/docker/koishi

在此之前你可以了解密钥登陆:

密钥登陆指南 推荐设置来使用一键脚本

1.机器人所在主机创建密钥

ssh-keygen -t rsa -b 4096

一路回车,不设置密码。
2.传递密钥给远程Koishi服务器

ssh-copy-id -p 22 username@your_ip

输入密码

3. 测试链接

ssh -p port username@your_ip

如果还需要密码请允许主机密钥登陆!这在你的面板SSH设置里面有,没有面板的可以回复我我告诉你怎么弄。

Step 4

Step 3的测试写入循环,我设置的是无延迟循环,根据服务情况调整。

Step 5

删除原先的机器人容器,用挂载的指令

docker run -d \
  --name MilkBotExample \
  --restart=always \
  -v /docker/koishi/data:/koishi/data \
  -p 主机端口:容器端口
  your_image

Step 6

重新完成协议端配置即可!

最后的最后,我附上脚本,

bash <(curl -s https://gist.githubusercontent.com/Michaelwucoc/f3d13e28ca28479e6ac31a13e993aed8/raw/7ffa06994c63e404221d1f92fd42d09757fede4d/start_sync_napcat.sh)
3 个赞

2 个赞

图方便建议直接整个koishi挂载到napcat。异地的用微力同步什么的软件可以同步,再就是就算这样偶尔也会有1200一般是图片太涩还是啥问题的不过很少

4 个赞

koishi在docker上但napcat不在怎么办

2 个赞

让Napcat在Docker上。我的Napcat一般由于各种问题停机,我选择Docker自动重启。

2 个赞