1. 现状
公司内部服务器,机器信息如下:
Linux ecs-shrsp-0001 4.19.90-89.23.v2401.ky10.aarch64
机器无法连接互联网,无内部建设镜像源。
需求:在机器上运行 oneapi 服务。
2. 具体操作
2.1 本地机器运行 oneapi
先在本地机器上运行 oneapi 镜像(包含 oneapi 和 mysql)
docker-compose.yml 文件内容如下:
yml
version: '3.8'
services:
db:
image: mysql:8.0.36
container_name: oneapi-mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: oneapimmysql
MYSQL_DATABASE: oneapi
ports:
- "3306:3306"
networks:
- fastgpt
volumes:
- ./mysql-data:/var/lib/mysql
one-api:
image: ghcr.io/songquanpeng/one-api:v0.6.7
container_name: one-api
restart: always
depends_on:
- db
ports:
- "8081:3000" #代理到8081端口,可根据需求调整
networks:
- fastgpt
environment:
- SQL_DSN=root:oneapimmysql@tcp(db:3306)/oneapi
- TZ=Asia/Shanghai
volumes:
- ./data:/data
networks:
fastgpt:
2.2 docker save 本地镜像
参考命令:docker save -o mynginx.tar mynginx:latest #这将 mynginx:latest 镜像保存为 mynginx.tar 文件。
2.3 服务器 docker load 上传镜像
参考命令:docker load -i mynginx.tar
2.4 服务器运行 docker-compose.yml 文件
docker-compose.yml 文件内容见上方。
此时戏剧性的一幕出现了,one-api 容器疯狂报错,错误信息如下:

原因:Token 数量计算库需要联网下载词库文件。
可是此时服务器无法连接互联网,尝试下载 cl100k_base.tiktoken 文件挂载到容器中,失败!
重新查看本地机器运行起来的 one-api,发现/tmp 下有添加文件

拷贝文件 9b5...、fb3...(到当前目录下encoders 文件夹中),上传到服务器运行起来的 oneapi 中

命令:
shell
# 复制encoders文件夹内的所有文件到目标容器目录
docker cp ./encoders/. one-api:/tmp/data-gym-cache
重新启动 one-api 问题解决!!