move docker related files under .container

This commit is contained in:
Wendong
2025-03-09 03:03:46 +08:00
parent 60fc299cee
commit 63a14115b0
10 changed files with 0 additions and 0 deletions

74
.container/.dockerignore Normal file
View File

@@ -0,0 +1,74 @@
# Git
.git
.gitignore
.github
# Docker
Dockerfile
docker-compose.yml
.dockerignore
DOCKER_README.md
run_in_docker.sh
# Python
__pycache__/
*.py[cod]
*$py.class
*.so
.Python
env/
build/
develop-eggs/
dist/
downloads/
eggs/
.eggs/
lib/
lib64/
parts/
sdist/
var/
*.egg-info/
.installed.cfg
*.egg
.pytest_cache/
.coverage
htmlcov/
# 虚拟环境
venv/
ENV/
env/
.env
# IDE
.idea/
.vscode/
*.swp
*.swo
.DS_Store
# 临时文件
temp_*
*.tmp
*.log
*.bak
# 缓存
.cache/
.npm/
.yarn/
# 大型数据文件
*.csv
*.sqlite
*.db
*.hdf5
*.h5
*.parquet
*.feather
*.pkl
*.pickle
# 数据目录
data/

298
.container/DOCKER_README.md Normal file
View File

@@ -0,0 +1,298 @@
# OWL项目Docker使用指南
本文档提供了如何使用Docker运行OWL项目的详细说明。
## 前提条件
- 安装 [Docker](https://docs.docker.com/get-docker/)
- 安装 [Docker Compose](https://docs.docker.com/compose/install/) (推荐v2.x版本)
- 获取必要的API密钥OpenAI API等
## 技术说明
本Docker配置使用了以下技术来确保OWL项目在容器中正常运行
- **Xvfb**虚拟帧缓冲区用于在无显示器的环境中模拟X服务器
- **Playwright**:用于自动化浏览器操作,配置为无头模式
- **共享内存**:增加了共享内存大小,以提高浏览器性能
- **BuildKit**使用Docker BuildKit加速构建过程
- **缓存优化**使用持久化卷缓存pip和Playwright依赖
- **跨平台兼容**提供了适用于Windows和macOS/Linux的脚本
## Docker Compose版本说明
本项目使用的docker-compose.yml文件兼容Docker Compose v2.x版本。如果您使用的是较旧的Docker Compose v1.x版本可能需要手动添加版本号
```yaml
version: '3'
services:
# ...其余配置保持不变
```
## 快速开始
### 0. 检查环境
首先,运行检查脚本确保您的环境已准备好:
#### 在macOS/Linux上检查
```bash
# 先给脚本添加执行权限
chmod +x check_docker.sh
# 运行检查脚本
./check_docker.sh
```
#### 在Windows上检查
```cmd
check_docker.bat
```
如果检查脚本发现任何问题,请按照提示进行修复。
### 1. 配置环境变量
复制环境变量模板文件并填写必要的API密钥
```bash
cp owl/.env_template owl/.env
```
然后编辑 `owl/.env` 文件填写必要的API密钥例如
```
OPENAI_API_KEY=your_openai_api_key
GOOGLE_API_KEY=your_google_api_key
SEARCH_ENGINE_ID=your_search_engine_id
```
### 2. 快速构建Docker镜像
#### 在macOS/Linux上构建
使用提供的Shell脚本可以加速Docker镜像的构建
```bash
# 先给脚本添加执行权限
chmod +x build_docker.sh
# 运行构建脚本
./build_docker.sh
```
#### 在Windows上构建
使用提供的批处理文件:
```cmd
build_docker.bat
```
或者使用标准方式构建并启动:
```bash
# 使用BuildKit加速构建
set DOCKER_BUILDKIT=1
set COMPOSE_DOCKER_CLI_BUILD=1
docker-compose build --build-arg BUILDKIT_INLINE_CACHE=1
# 启动容器
docker-compose up -d
```
### 3. 交互式使用容器
容器启动后会自动进入交互式shell环境并显示欢迎信息和可用脚本列表
```bash
# 进入容器(如果没有自动进入)
docker-compose exec owl bash
```
在容器内,您可以直接运行任何可用的脚本:
```bash
# 运行默认脚本
xvfb-python run.py
# 运行DeepSeek示例
xvfb-python run_deepseek_example.py
# 运行脚本并传递查询参数
xvfb-python run.py "什么是人工智能?"
```
### 4. 使用外部脚本运行查询
#### 在macOS/Linux上运行
```bash
# 先给脚本添加执行权限
chmod +x run_in_docker.sh
# 默认使用 run.py 脚本
./run_in_docker.sh "你的问题"
# 指定使用特定脚本
./run_in_docker.sh run_deepseek_example.py "你的问题"
```
#### 在Windows上运行
```cmd
REM 默认使用 run.py 脚本
run_in_docker.bat "你的问题"
REM 指定使用特定脚本
run_in_docker.bat run_deepseek_example.py "你的问题"
```
**可用脚本**
- `run.py` - 默认脚本使用OpenAI GPT-4o模型
- `run_deepseek_example.py` - 使用DeepSeek模型
- `run_gaia_roleplaying.py` - GAIA基准测试脚本
## 目录挂载
Docker Compose配置中已经设置了以下挂载点
- `./owl/.env:/app/owl/.env`挂载环境变量文件方便修改API密钥
- `./data:/app/data`:挂载数据目录,用于存储和访问数据文件
- `playwright-cache`持久化卷用于缓存Playwright浏览器
- `pip-cache`持久化卷用于缓存pip包
## 环境变量
您可以通过以下两种方式设置环境变量:
1. 修改 `owl/.env` 文件
2.`docker-compose.yml` 文件的 `environment` 部分添加环境变量
## 构建优化
本Docker配置包含多项构建优化
1. **使用国内镜像源**使用清华大学镜像源加速pip包下载
2. **层优化**减少Dockerfile中的层数提高构建效率
3. **缓存利用**
- 启用pip缓存避免重复下载依赖包
- 使用Docker BuildKit内联缓存
- 合理安排Dockerfile指令顺序最大化利用缓存
4. **BuildKit**启用Docker BuildKit加速构建
5. **持久化缓存**
- 使用Docker卷缓存pip包`pip-cache`
- 使用Docker卷缓存Playwright浏览器`playwright-cache`
- 本地缓存目录(`.docker-cache`
### 缓存清理
如果需要清理缓存,可以使用以下命令:
```bash
# 清理Docker构建缓存
docker builder prune
# 清理Docker卷会删除所有未使用的卷包括缓存卷
docker volume prune
# 清理本地缓存目录
rm -rf .docker-cache
```
## 跨平台兼容性
本项目提供了适用于不同操作系统的脚本:
1. **检查脚本**
- `check_docker.sh`macOS/Linux检查Docker环境
- `check_docker.bat`Windows检查Docker环境
2. **构建脚本**
- `build_docker.sh`macOS/Linux构建Docker镜像
- `build_docker.bat`Windows构建Docker镜像
3. **运行脚本**
- `run_in_docker.sh`macOS/Linux运行Docker容器中的脚本
- `run_in_docker.bat`Windows运行Docker容器中的脚本
这些脚本会自动检测操作系统类型,并使用适当的命令。
## 故障排除
### 容器无法启动
检查日志以获取更多信息:
```bash
docker-compose logs
```
### API密钥问题
确保您已经在 `owl/.env` 文件中正确设置了所有必要的API密钥。
### Docker Compose警告
如果您看到关于`version`属性过时的警告:
```
WARN[0000] docker-compose.yml: the attribute `version` is obsolete
```
这是因为您使用的是Docker Compose v2.x它不再需要显式指定版本号。我们已经从配置文件中移除了这个属性所以您不会再看到这个警告。
### 浏览器相关问题
如果遇到浏览器相关的问题,可以尝试以下解决方案:
1. 确保在Docker容器中使用`xvfb-python`命令运行Python脚本
2. 检查是否正确安装了Xvfb和相关依赖
3. 增加共享内存大小在docker-compose.yml中已设置为2GB
### 构建速度慢
如果构建速度慢,可以尝试以下解决方案:
1. 确保启用了Docker BuildKit`DOCKER_BUILDKIT=1`
2. 确保启用了pip缓存已在docker-compose.yml中配置
3. 使用`--build-arg BUILDKIT_INLINE_CACHE=1`参数构建(已在构建脚本中配置)
4. 如果是首次构建,下载依赖包可能需要较长时间,后续构建会更快
### Windows特有问题
如果在Windows上遇到问题
1. 确保使用管理员权限运行命令提示符或PowerShell
2. 如果遇到路径问题,尝试使用正斜杠(/)而不是反斜杠(\
3. 如果遇到Docker Compose命令问题尝试使用`docker compose`(无连字符)
### 内存不足
如果遇到内存不足的问题,可以在 `docker-compose.yml` 文件中调整资源限制:
```yaml
services:
owl:
# 其他配置...
deploy:
resources:
limits:
cpus: '4' # 增加CPU核心数
memory: 8G # 增加内存限制
```
## 自定义Docker镜像
如果需要自定义Docker镜像可以修改 `Dockerfile` 文件,然后重新构建:
```bash
# macOS/Linux
./build_docker.sh
# Windows
build_docker.bat
```

57
.container/Dockerfile Normal file
View File

@@ -0,0 +1,57 @@
FROM python:3.10-slim
WORKDIR /app
# 设置pip镜像源以加速下载
RUN pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
# 优化apt安装减少层数
RUN apt-get update && apt-get install -y --no-install-recommends \
build-essential \
curl \
software-properties-common \
git \
ffmpeg \
libsm6 \
libxext6 \
# 添加xvfb和相关依赖
xvfb \
xauth \
x11-utils \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/*
# 先复制并安装requirements.txt利用Docker缓存机制
COPY requirements.txt .
# 启用pip缓存以加速构建
RUN pip install -r requirements.txt
# 安装 Playwright 依赖(使用国内镜像源)
ENV PLAYWRIGHT_BROWSERS_PATH=/root/.cache/ms-playwright
ENV PLAYWRIGHT_DOWNLOAD_HOST=https://npmmirror.com/mirrors/playwright
RUN pip install playwright && \
playwright install --with-deps chromium
# 复制项目文件
COPY owl/ ./owl/
COPY licenses/ ./licenses/
COPY assets/ ./assets/
COPY README.md .
COPY README_zh.md .
# 设置环境变量文件
COPY owl/.env_template ./owl/.env
# 设置工作目录
WORKDIR /app/owl
# 创建启动脚本
RUN echo '#!/bin/bash\nxvfb-run --auto-servernum --server-args="-screen 0 1280x960x24" python "$@"' > /usr/local/bin/xvfb-python && \
chmod +x /usr/local/bin/xvfb-python
# 创建欢迎脚本
RUN echo '#!/bin/bash\necho "欢迎使用OWL项目Docker环境"\necho ""\necho "可用的脚本:"\nls -1 *.py | grep -v "__" | sed "s/^/- /"\necho ""\necho "运行示例:"\necho " xvfb-python run.py # 运行默认脚本"\necho " xvfb-python run_deepseek_example.py # 运行DeepSeek示例"\necho ""\necho "或者使用自定义查询:"\necho " xvfb-python run.py \"你的问题\""\necho ""' > /usr/local/bin/owl-welcome && \
chmod +x /usr/local/bin/owl-welcome
# 容器启动命令改为交互式shell
CMD ["/bin/bash", "-c", "owl-welcome && /bin/bash"]

View File

@@ -0,0 +1,24 @@
@echo off
echo 在Windows上构建Docker镜像...
REM 设置Docker BuildKit环境变量
set DOCKER_BUILDKIT=1
set COMPOSE_DOCKER_CLI_BUILD=1
echo 启用Docker BuildKit加速构建...
REM 创建缓存目录
if not exist ".docker-cache\pip" mkdir .docker-cache\pip
REM 构建Docker镜像
docker-compose build --build-arg BUILDKIT_INLINE_CACHE=1
if %ERRORLEVEL% EQU 0 (
echo Docker镜像构建成功
echo 可以使用以下命令启动容器:
echo docker-compose up -d
) else (
echo Docker镜像构建失败请检查错误信息。
)
pause

41
.container/build_docker.sh Executable file
View File

@@ -0,0 +1,41 @@
#!/bin/bash
# 检测操作系统类型
OS_TYPE=$(uname -s)
echo "检测到操作系统: $OS_TYPE"
# 设置Docker BuildKit环境变量
export DOCKER_BUILDKIT=1
export COMPOSE_DOCKER_CLI_BUILD=1
echo "启用Docker BuildKit加速构建..."
# 创建缓存目录
mkdir -p .docker-cache/pip
# 根据操作系统类型执行不同的命令
if [[ "$OS_TYPE" == "Darwin" ]]; then
# macOS
echo "在macOS上构建Docker镜像..."
docker-compose build --build-arg BUILDKIT_INLINE_CACHE=1
elif [[ "$OS_TYPE" == "Linux" ]]; then
# Linux
echo "在Linux上构建Docker镜像..."
docker-compose build --parallel --build-arg BUILDKIT_INLINE_CACHE=1
elif [[ "$OS_TYPE" == MINGW* ]] || [[ "$OS_TYPE" == CYGWIN* ]] || [[ "$OS_TYPE" == MSYS* ]]; then
# Windows
echo "在Windows上构建Docker镜像..."
docker-compose build --build-arg BUILDKIT_INLINE_CACHE=1
else
echo "未知操作系统,尝试使用标准命令构建..."
docker-compose build --build-arg BUILDKIT_INLINE_CACHE=1
fi
# 检查构建结果
if [ $? -eq 0 ]; then
echo "Docker镜像构建成功"
echo "可以使用以下命令启动容器:"
echo "docker-compose up -d"
else
echo "Docker镜像构建失败请检查错误信息。"
fi

View File

@@ -0,0 +1,60 @@
@echo off
echo 检查Docker环境...
REM 检查Docker是否安装
where docker >nul 2>nul
if %ERRORLEVEL% NEQ 0 (
echo 错误: Docker未安装
echo 在Windows上安装Docker的方法:
echo 1. 访问 https://docs.docker.com/desktop/install/windows-install/ 下载Docker Desktop
echo 2. 安装并启动Docker Desktop
pause
exit /b 1
)
echo Docker已安装
REM 检查Docker Compose是否安装
where docker-compose >nul 2>nul
if %ERRORLEVEL% NEQ 0 (
echo 警告: Docker Compose未找到尝试使用新的docker compose命令
docker compose version >nul 2>nul
if %ERRORLEVEL% NEQ 0 (
echo 错误: Docker Compose未安装
echo Docker Desktop for Windows应该已包含Docker Compose
echo 请确保Docker Desktop已正确安装
pause
exit /b 1
) else (
echo 使用新的docker compose命令
)
) else (
echo Docker Compose已安装
)
REM 检查Docker是否正在运行
docker info >nul 2>nul
if %ERRORLEVEL% NEQ 0 (
echo 错误: Docker未运行
echo 请启动Docker Desktop应用程序
pause
exit /b 1
)
echo Docker正在运行
REM 检查是否有.env文件
if not exist "owl\.env" (
echo 警告: 未找到owl\.env文件
echo 请运行以下命令创建环境变量文件:
echo copy owl\.env_template owl\.env
echo 然后编辑owl\.env文件填写必要的API密钥
) else (
echo 环境变量文件已存在
)
echo 所有检查完成您的系统已准备好构建和运行OWL项目的Docker容器
echo 请运行以下命令构建Docker镜像:
echo build_docker.bat
pause

92
.container/check_docker.sh Executable file
View File

@@ -0,0 +1,92 @@
#!/bin/bash
# 检测操作系统类型
OS_TYPE=$(uname -s)
echo "检测到操作系统: $OS_TYPE"
# 检查Docker是否安装
if ! command -v docker &> /dev/null; then
echo "错误: Docker未安装"
if [[ "$OS_TYPE" == "Darwin" ]]; then
echo "在macOS上安装Docker的方法:"
echo "1. 访问 https://docs.docker.com/desktop/install/mac-install/ 下载Docker Desktop"
echo "2. 安装并启动Docker Desktop"
elif [[ "$OS_TYPE" == "Linux" ]]; then
echo "在Linux上安装Docker的方法:"
echo "1. 运行以下命令:"
echo " sudo apt-get update"
echo " sudo apt-get install docker.io docker-compose"
echo "2. 启动Docker服务:"
echo " sudo systemctl start docker"
echo " sudo systemctl enable docker"
elif [[ "$OS_TYPE" == MINGW* ]] || [[ "$OS_TYPE" == CYGWIN* ]] || [[ "$OS_TYPE" == MSYS* ]]; then
echo "在Windows上安装Docker的方法:"
echo "1. 访问 https://docs.docker.com/desktop/install/windows-install/ 下载Docker Desktop"
echo "2. 安装并启动Docker Desktop"
fi
exit 1
fi
echo "Docker已安装"
# 检查Docker Compose是否安装
if ! command -v docker-compose &> /dev/null; then
echo "错误: Docker Compose未安装"
if [[ "$OS_TYPE" == "Darwin" ]]; then
echo "Docker Desktop for Mac已包含Docker Compose"
elif [[ "$OS_TYPE" == "Linux" ]]; then
echo "在Linux上安装Docker Compose的方法:"
echo "1. 运行以下命令:"
echo " sudo apt-get install docker-compose"
elif [[ "$OS_TYPE" == MINGW* ]] || [[ "$OS_TYPE" == CYGWIN* ]] || [[ "$OS_TYPE" == MSYS* ]]; then
echo "Docker Desktop for Windows已包含Docker Compose"
fi
exit 1
fi
echo "Docker Compose已安装"
# 检查Docker是否正在运行
if ! docker info &> /dev/null; then
echo "错误: Docker未运行"
if [[ "$OS_TYPE" == "Darwin" ]]; then
echo "请启动Docker Desktop应用程序"
elif [[ "$OS_TYPE" == "Linux" ]]; then
echo "请运行以下命令启动Docker服务:"
echo "sudo systemctl start docker"
elif [[ "$OS_TYPE" == MINGW* ]] || [[ "$OS_TYPE" == CYGWIN* ]] || [[ "$OS_TYPE" == MSYS* ]]; then
echo "请启动Docker Desktop应用程序"
fi
exit 1
fi
echo "Docker正在运行"
# 检查是否有足够的磁盘空间
FREE_SPACE=$(df -h . | awk 'NR==2 {print $4}')
echo "可用磁盘空间: $FREE_SPACE"
# 检查是否有.env文件
if [ ! -f "owl/.env" ]; then
echo "警告: 未找到owl/.env文件"
echo "请运行以下命令创建环境变量文件:"
echo "cp owl/.env_template owl/.env"
echo "然后编辑owl/.env文件填写必要的API密钥"
else
echo "环境变量文件已存在"
fi
echo "所有检查完成您的系统已准备好构建和运行OWL项目的Docker容器"
echo "请运行以下命令构建Docker镜像:"
if [[ "$OS_TYPE" == MINGW* ]] || [[ "$OS_TYPE" == CYGWIN* ]] || [[ "$OS_TYPE" == MSYS* ]]; then
echo "build_docker.bat"
else
echo "./build_docker.sh"
fi

View File

@@ -0,0 +1,52 @@
services:
owl:
build:
context: .
dockerfile: Dockerfile
args:
# 构建参数
BUILDKIT_INLINE_CACHE: 1
# 使用BuildKit加速构建
cache_from:
- python:3.10-slim
volumes:
# 挂载.env文件方便配置API密钥
- ./owl/.env:/app/owl/.env
# 可选:挂载数据目录
- ./data:/app/data
# 挂载缓存目录,避免重复下载
- playwright-cache:/root/.cache/ms-playwright
- pip-cache:/root/.pip/cache
environment:
# 可以在这里设置环境变量,覆盖.env文件中的设置
- OPENAI_API_KEY=${OPENAI_API_KEY}
# 添加显示相关的环境变量
- DISPLAY=:99
- PLAYWRIGHT_BROWSERS_PATH=/root/.cache/ms-playwright
# 设置Python不生成.pyc文件减少磁盘IO
- PYTHONDONTWRITEBYTECODE=1
# 设置Python不缓冲输出方便查看日志
- PYTHONUNBUFFERED=1
# 设置终端颜色
- TERM=xterm-256color
# 启用pip缓存
- PIP_CACHE_DIR=/root/.pip/cache
ports:
# 如果项目有Web界面可以映射端口
- "8000:8000"
# 使用交互模式运行容器
stdin_open: true
tty: true
# 添加共享内存大小,提高浏览器性能
shm_size: 2gb
# 设置资源限制
deploy:
resources:
limits:
cpus: '2'
memory: 4G
# 定义持久化卷,用于缓存
volumes:
playwright-cache:
pip-cache:

View File

@@ -0,0 +1,61 @@
@echo off
setlocal enabledelayedexpansion
REM 检查参数
if "%~1"=="" (
echo 用法: run_in_docker.bat [脚本名称] "你的问题"
echo 例如: run_in_docker.bat run.py "什么是人工智能?"
echo 或者: run_in_docker.bat run_deepseek_example.py "什么是人工智能?"
echo 如果不指定脚本名称,默认使用 run.py
exit /b 1
)
REM 判断第一个参数是否是脚本名称
set SCRIPT_NAME=%~1
set QUERY=%~2
if "!SCRIPT_NAME:~-3!"==".py" (
REM 如果提供了第二个参数,则为查询内容
if "!QUERY!"=="" (
echo 请提供查询参数,例如: run_in_docker.bat !SCRIPT_NAME! "你的问题"
exit /b 1
)
) else (
REM 如果第一个参数不是脚本名称,则默认使用 run.py
set QUERY=!SCRIPT_NAME!
set SCRIPT_NAME=run.py
)
REM 检查脚本是否存在
if not exist "owl\!SCRIPT_NAME!" (
echo 错误: 脚本 'owl\!SCRIPT_NAME!' 不存在
echo 可用的脚本有:
dir /b owl\*.py | findstr /v "__"
exit /b 1
)
echo 使用脚本: !SCRIPT_NAME!
echo 查询内容: !QUERY!
REM 确保Docker容器正在运行
docker-compose ps | findstr "owl.*Up" > nul
if errorlevel 1 (
echo 启动Docker容器...
docker-compose up -d
REM 等待容器启动
echo 等待容器启动...
timeout /t 5 /nobreak > nul
)
REM 在容器中运行指定的脚本,传递查询参数
echo 在Docker容器中运行脚本...
docker-compose exec -T owl xvfb-python !SCRIPT_NAME! "!QUERY!"
if errorlevel 0 (
echo 查询完成!
) else (
echo 查询执行失败,请检查错误信息。
)
pause

82
.container/run_in_docker.sh Executable file
View File

@@ -0,0 +1,82 @@
#!/bin/bash
# 检测操作系统类型
OS_TYPE=$(uname -s)
echo "检测到操作系统: $OS_TYPE"
# 检查是否提供了查询参数
if [ $# -lt 1 ]; then
echo "用法: ./run_in_docker.sh [脚本名称] '你的问题'"
echo "例如: ./run_in_docker.sh run.py '什么是人工智能?'"
echo "或者: ./run_in_docker.sh run_deepseek_example.py '什么是人工智能?'"
echo "如果不指定脚本名称,默认使用 run.py"
exit 1
fi
# 判断第一个参数是否是脚本名称
if [[ $1 == *.py ]]; then
SCRIPT_NAME="$1"
# 如果提供了第二个参数,则为查询内容
if [ $# -ge 2 ]; then
QUERY="$2"
else
echo "请提供查询参数,例如: ./run_in_docker.sh $SCRIPT_NAME '你的问题'"
exit 1
fi
else
# 如果第一个参数不是脚本名称,则默认使用 run.py
SCRIPT_NAME="run.py"
QUERY="$1"
fi
# 根据操作系统类型设置脚本路径检查方式
if [[ "$OS_TYPE" == "Darwin" ]] || [[ "$OS_TYPE" == "Linux" ]]; then
# macOS 或 Linux
if [ ! -f "owl/$SCRIPT_NAME" ]; then
echo "错误: 脚本 'owl/$SCRIPT_NAME' 不存在"
echo "可用的脚本有:"
ls -1 owl/*.py | grep -v "__"
exit 1
fi
else
# Windows
if [ ! -f "owl/$SCRIPT_NAME" ]; then
echo "错误: 脚本 'owl/$SCRIPT_NAME' 不存在"
echo "可用的脚本有:"
find owl -name "*.py" | grep -v "__" | sed 's/\\/\//g'
exit 1
fi
fi
echo "使用脚本: $SCRIPT_NAME"
echo "查询内容: $QUERY"
# 确保Docker容器正在运行
CONTAINER_RUNNING=$(docker-compose ps | grep -c "owl.*Up" || true)
if [ "$CONTAINER_RUNNING" -eq 0 ]; then
echo "启动Docker容器..."
docker-compose up -d
# 等待容器启动
echo "等待容器启动..."
sleep 5
fi
# 直接在容器中运行指定的脚本,传递查询参数
echo "在Docker容器中运行脚本..."
# 根据操作系统类型执行不同的命令
if [[ "$OS_TYPE" == MINGW* ]] || [[ "$OS_TYPE" == CYGWIN* ]] || [[ "$OS_TYPE" == MSYS* ]]; then
# Windows可能需要特殊处理引号
winpty docker-compose exec -T owl xvfb-python $SCRIPT_NAME "$QUERY"
else
# macOS 或 Linux
docker-compose exec -T owl xvfb-python $SCRIPT_NAME "$QUERY"
fi
# 检查命令执行结果
if [ $? -eq 0 ]; then
echo "查询完成!"
else
echo "查询执行失败,请检查错误信息。"
fi