最近在操作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
我昨天研究了一下还真的解决了问题。
分两种情况
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)
