docker启动anything llm的时候报unable to open database file: ../storage/anythingllm.db解决办法

docker的安装和anything llm镜像的下载就不在过多介绍,下载docker和镜像的时候,记得切换到国内源,否则很可能下载速度缓慢或者下载失败。
运行命令参考的是官网的命令

export STORAGE_LOCATION=$HOME/anythingllm && \
mkdir -p $STORAGE_LOCATION && \
touch "$STORAGE_LOCATION/.env" && \
docker run -d -p 3001:3001 \
--cap-add SYS_ADMIN \
-v ${STORAGE_LOCATION}:/app/server/storage \
-v ${STORAGE_LOCATION}/.env:/app/server/.env \
-e STORAGE_DIR="/app/server/storage" \
mintplexlabs/anythingllm

但是总会报错

Environment variables loaded from .env
Prisma schema loaded from prisma/schema.prisma
Datasource "db": SQLite database "anythingllm.db" at "file:../storage/anythingllm.db"

Error: Schema engine error:
SQLite database error
unable to open database file: ../storage/anythingllm.db

最初以为是映射问题,总在映射上找原因,搜索了很多,但是没有能够解决问题的办法。于是又浏览了下官网的安装文档,发现了一个比较奇怪的说明,具体链接

The UID and GID are set to 1000 by default. This is the default user in the Docker container and on most host operating systems.
If there is a mismatch between your host user UID and GID and what is set in the .env file, you may experience permission issues.

1000是linux普通用户的标识,而docker run的时候使用的是root,所以没有往权限方面想,难道是映射的文件夹权限不足?于是

chmod 777 anythingllm

再次运行,果然成功了。

结论

因为docker运行时创建文件的用户是uid为1000的普通用户,如果使用root进行目录创建,普通用户是无法写入文件的,所以导致运行的时候报错,修改目录权限即可。当然如果觉得777权限过大,可以通过chown改变目录所有者为uid为1000的用户。