这里遇到了很多的问题,开始不管是用 docker build
还是 docker-compose build
都报错。后来经过折腾之后才发现 ./docker/Dockerfile
文件它是支持多平台编译的。
那为什么在Windows下没有问题呢?其实原因是我Windows下用的是Docker Desktop,而它自带buildx工具,会自动识别当前系统平台,而ubuntu下没有集成buildx。
下载:
export BUILDX_VERSION=(curl -s https://api.github.com/repos/docker/buildx/releases/latest | grep -oP '"tag_name": "\K(.*)(?=")')
curl -LO https://github.com/docker/buildx/releases/download/{BUILDX_VERSION}/buildx-${BUILDX_VERSION}.linux-amd64
安装:
mkdir -p ~/.docker/cli-plugins
mv buildx-${BUILDX_VERSION}.linux-amd64 ~/.docker/cli-plugins/docker-buildx
chmod +x ~/.docker/cli-plugins/docker-buildx
安装完成
docker buildx version
使用,这个工具也是个docker:
docker buildx create --use
docker buildx inspect --bootstrap
用buildx指定platform
docker buildx build --platform linux/amd64 --build-arg ARG_UID=1000 --build-arg ARG_GID=1000 -f ./docker/Dockerfile -t anythingllm:my_1.0 --load --output type=docker .
创建db和env配置文件
cd /var/lib/anythingllm-my
mkdir logs
touch anythingllm.db
touch .env
chown 1000:1000 /var/lib/anythingllm-my/ -R
这里要注意的是一定要给目录/var/lib/anythingllm-my修改owner(最后一条命令),不然docker启动会失败,报写readonly db的错误。
不建议用docker-compose
export STORAGE_LOCATION=/var/lib/anythingllm-my &&
docker run -d \
--name anythingllm-my \
--add-host=host.docker.internal:host-gateway \
--env STORAGE_DIR=/app/server/storage \
-p 3001:3001/tcp \
--restart=always \
--user anythingllm \
-v {STORAGE_LOCATION}:/app/server/storage \
-v{STORAGE_LOCATION}/.env:/app/server/.env \
-v ${STORAGE_LOCATION}/logs:/app/server/logs/ \
-w /app \
anythingllm:my_1.0
修改文件 ./docker/docker-entrypoint.sh
如下,增加了输出服务端log:
#!/bin/bash
{
cd /app/server/ &&
npx prisma generate --schema=./prisma/schema.prisma &&
npx prisma migrate deploy --schema=./prisma/schema.prisma &&
node /app/server/index.js &> /app/server/logs/server.log
} &
{ node /app/collector/index.js; } &
wait -n
exit $?
这样就可以在ubuntu上定制自己的anything镜像了。
powered by kaifamiao