Merge branch 'camel-ai:main' into disable-coding-interactive-mode
Browse files- .container/Dockerfile +27 -27
- .container/build_docker.bat +39 -39
- .container/build_docker.sh +51 -51
- .container/check_docker.bat +26 -26
- .container/check_docker.sh +37 -37
- .container/docker-compose.yml +17 -17
- .container/run_in_docker.bat +37 -37
- .container/run_in_docker.sh +44 -44
.container/Dockerfile
CHANGED
@@ -1,32 +1,32 @@
|
|
1 |
-
# 使用ARG定义可配置的构建参数
|
2 |
ARG PYTHON_VERSION=3.10
|
3 |
ARG PIP_INDEX_URL=https://pypi.tuna.tsinghua.edu.cn/simple
|
4 |
ARG PLAYWRIGHT_DOWNLOAD_HOST=https://npmmirror.com/mirrors/playwright
|
5 |
|
6 |
-
# 第一阶段:构建依赖
|
7 |
FROM python:${PYTHON_VERSION}-slim AS builder
|
8 |
|
9 |
-
# 设置工作目录
|
10 |
WORKDIR /build
|
11 |
|
12 |
-
# 设置pip镜像源以加速下载
|
13 |
ARG PIP_INDEX_URL
|
14 |
RUN pip config set global.index-url ${PIP_INDEX_URL}
|
15 |
|
16 |
-
# 安装构建依赖
|
17 |
RUN apt-get update && apt-get install -y --no-install-recommends \
|
18 |
build-essential \
|
19 |
&& apt-get clean \
|
20 |
&& rm -rf /var/lib/apt/lists/*
|
21 |
|
22 |
-
# 复制并安装requirements.txt
|
23 |
COPY requirements.txt .
|
24 |
RUN pip install --no-cache-dir --prefix=/install -r requirements.txt
|
25 |
|
26 |
-
# 第二阶段:运行时环境
|
27 |
FROM python:${PYTHON_VERSION}-slim
|
28 |
|
29 |
-
# 添加构建信息标签
|
30 |
ARG BUILD_DATE
|
31 |
ARG VERSION
|
32 |
LABEL org.opencontainers.image.created="${BUILD_DATE}" \
|
@@ -35,72 +35,72 @@ LABEL org.opencontainers.image.created="${BUILD_DATE}" \
|
|
35 |
org.opencontainers.image.description="OWL Project Docker Image" \
|
36 |
org.opencontainers.image.source="https://github.com/yourusername/owl"
|
37 |
|
38 |
-
# 设置工作目录
|
39 |
WORKDIR /app
|
40 |
|
41 |
-
# 设置pip镜像源以加速下载
|
42 |
ARG PIP_INDEX_URL
|
43 |
RUN pip config set global.index-url ${PIP_INDEX_URL}
|
44 |
|
45 |
-
# 从builder阶段复制已安装的Python包
|
46 |
COPY --from=builder /install /usr/local
|
47 |
|
48 |
-
# 优化apt安装,减少层数
|
49 |
RUN apt-get update && apt-get install -y --no-install-recommends \
|
50 |
curl \
|
51 |
git \
|
52 |
ffmpeg \
|
53 |
libsm6 \
|
54 |
libxext6 \
|
55 |
-
# 添加xvfb和相关依赖
|
56 |
xvfb \
|
57 |
xauth \
|
58 |
x11-utils \
|
59 |
&& apt-get clean \
|
60 |
&& rm -rf /var/lib/apt/lists/*
|
61 |
|
62 |
-
# 安装 Playwright 依赖(使用国内镜像源)
|
63 |
ENV PLAYWRIGHT_BROWSERS_PATH=/root/.cache/ms-playwright
|
64 |
ARG PLAYWRIGHT_DOWNLOAD_HOST
|
65 |
ENV PLAYWRIGHT_DOWNLOAD_HOST=${PLAYWRIGHT_DOWNLOAD_HOST}
|
66 |
RUN pip install --no-cache-dir playwright && \
|
67 |
playwright install --with-deps chromium
|
68 |
|
69 |
-
# 创建非root用户
|
70 |
RUN groupadd -r owl && useradd -r -g owl -m owl
|
71 |
|
72 |
-
# 复制项目文件
|
73 |
COPY owl/ ./owl/
|
74 |
COPY licenses/ ./licenses/
|
75 |
COPY assets/ ./assets/
|
76 |
COPY README.md .
|
77 |
COPY README_zh.md .
|
78 |
|
79 |
-
# 设置环境变量文件
|
80 |
COPY owl/.env_template ./owl/.env
|
81 |
|
82 |
-
# 创建启动脚本
|
83 |
RUN echo '#!/bin/bash\nxvfb-run --auto-servernum --server-args="-screen 0 1280x960x24" python "$@"' > /usr/local/bin/xvfb-python && \
|
84 |
chmod +x /usr/local/bin/xvfb-python
|
85 |
|
86 |
-
# 创建欢迎脚本
|
87 |
-
RUN echo '#!/bin/bash\necho "欢迎使用OWL项目Docker环境!"\necho ""\necho "
|
88 |
chmod +x /usr/local/bin/owl-welcome
|
89 |
|
90 |
-
# 设置工作目录
|
91 |
WORKDIR /app/owl
|
92 |
|
93 |
-
# 设置适当的权限
|
94 |
RUN chown -R owl:owl /app
|
95 |
RUN mkdir -p /root/.cache && chown -R owl:owl /root/.cache
|
96 |
|
97 |
-
# 切换到非root用户
|
98 |
-
# 注意:如果需要访问/dev/shm,可能仍需要root用户
|
99 |
# USER owl
|
100 |
|
101 |
-
# 添加健康检查
|
102 |
HEALTHCHECK --interval=30s --timeout=10s --start-period=5s --retries=3 \
|
103 |
CMD python -c "import sys; sys.exit(0 if __import__('os').path.exists('/app/owl') else 1)"
|
104 |
|
105 |
-
# 容器启动命令
|
106 |
-
CMD ["/bin/bash", "-c", "owl-welcome && /bin/bash"]
|
|
|
1 |
+
# 使用ARG定义可配置的构建参数 | Using ARG to define configurable build parameters
|
2 |
ARG PYTHON_VERSION=3.10
|
3 |
ARG PIP_INDEX_URL=https://pypi.tuna.tsinghua.edu.cn/simple
|
4 |
ARG PLAYWRIGHT_DOWNLOAD_HOST=https://npmmirror.com/mirrors/playwright
|
5 |
|
6 |
+
# 第一阶段:构建依赖 | Stage 1: Build dependencies
|
7 |
FROM python:${PYTHON_VERSION}-slim AS builder
|
8 |
|
9 |
+
# 设置工作目录 | Set working directory
|
10 |
WORKDIR /build
|
11 |
|
12 |
+
# 设置pip镜像源以加速下载 | Set pip mirror to accelerate downloads
|
13 |
ARG PIP_INDEX_URL
|
14 |
RUN pip config set global.index-url ${PIP_INDEX_URL}
|
15 |
|
16 |
+
# 安装构建依赖 | Install build dependencies
|
17 |
RUN apt-get update && apt-get install -y --no-install-recommends \
|
18 |
build-essential \
|
19 |
&& apt-get clean \
|
20 |
&& rm -rf /var/lib/apt/lists/*
|
21 |
|
22 |
+
# 复制并安装requirements.txt | Copy and install requirements.txt
|
23 |
COPY requirements.txt .
|
24 |
RUN pip install --no-cache-dir --prefix=/install -r requirements.txt
|
25 |
|
26 |
+
# 第二阶段:运行时环境 | Stage 2: Runtime environment
|
27 |
FROM python:${PYTHON_VERSION}-slim
|
28 |
|
29 |
+
# 添加构建信息标签 | Add build information labels
|
30 |
ARG BUILD_DATE
|
31 |
ARG VERSION
|
32 |
LABEL org.opencontainers.image.created="${BUILD_DATE}" \
|
|
|
35 |
org.opencontainers.image.description="OWL Project Docker Image" \
|
36 |
org.opencontainers.image.source="https://github.com/yourusername/owl"
|
37 |
|
38 |
+
# 设置工作目录 | Set working directory
|
39 |
WORKDIR /app
|
40 |
|
41 |
+
# 设置pip镜像源以加速下载 | Set pip mirror to accelerate downloads
|
42 |
ARG PIP_INDEX_URL
|
43 |
RUN pip config set global.index-url ${PIP_INDEX_URL}
|
44 |
|
45 |
+
# 从builder阶段复制已安装的Python包 | Copy installed Python packages from builder stage
|
46 |
COPY --from=builder /install /usr/local
|
47 |
|
48 |
+
# 优化apt安装,减少层数 | Optimize apt installation, reduce layers
|
49 |
RUN apt-get update && apt-get install -y --no-install-recommends \
|
50 |
curl \
|
51 |
git \
|
52 |
ffmpeg \
|
53 |
libsm6 \
|
54 |
libxext6 \
|
55 |
+
# 添加xvfb和相关依赖 | Add xvfb and related dependencies
|
56 |
xvfb \
|
57 |
xauth \
|
58 |
x11-utils \
|
59 |
&& apt-get clean \
|
60 |
&& rm -rf /var/lib/apt/lists/*
|
61 |
|
62 |
+
# 安装 Playwright 依赖(使用国内镜像源) | Install Playwright dependencies (using Chinese mirror)
|
63 |
ENV PLAYWRIGHT_BROWSERS_PATH=/root/.cache/ms-playwright
|
64 |
ARG PLAYWRIGHT_DOWNLOAD_HOST
|
65 |
ENV PLAYWRIGHT_DOWNLOAD_HOST=${PLAYWRIGHT_DOWNLOAD_HOST}
|
66 |
RUN pip install --no-cache-dir playwright && \
|
67 |
playwright install --with-deps chromium
|
68 |
|
69 |
+
# 创建非root用户 | Create non-root user
|
70 |
RUN groupadd -r owl && useradd -r -g owl -m owl
|
71 |
|
72 |
+
# 复制项目文件 | Copy project files
|
73 |
COPY owl/ ./owl/
|
74 |
COPY licenses/ ./licenses/
|
75 |
COPY assets/ ./assets/
|
76 |
COPY README.md .
|
77 |
COPY README_zh.md .
|
78 |
|
79 |
+
# 设置环境变量文件 | Set environment variables file
|
80 |
COPY owl/.env_template ./owl/.env
|
81 |
|
82 |
+
# 创建启动脚本 | Create startup script
|
83 |
RUN echo '#!/bin/bash\nxvfb-run --auto-servernum --server-args="-screen 0 1280x960x24" python "$@"' > /usr/local/bin/xvfb-python && \
|
84 |
chmod +x /usr/local/bin/xvfb-python
|
85 |
|
86 |
+
# 创建欢迎脚本 | Create welcome script
|
87 |
+
RUN echo '#!/bin/bash\necho "欢迎使用OWL项目Docker环境!"\necho "Welcome to OWL Project Docker environment!"\necho ""\necho "可用的脚本 | Available scripts:"\nls -1 *.py | grep -v "__" | sed "s/^/- /"\necho ""\necho "运行示例 | Run examples:"\necho " xvfb-python run.py # 运行默认脚本 | Run default script"\necho " xvfb-python run_deepseek_example.py # 运行DeepSeek示例 | Run DeepSeek example"\necho ""\necho "或者使用自定义查询 | Or use custom query:"\necho " xvfb-python run.py \"你的问题 | Your question\""\necho ""' > /usr/local/bin/owl-welcome && \
|
88 |
chmod +x /usr/local/bin/owl-welcome
|
89 |
|
90 |
+
# 设置工作目录 | Set working directory
|
91 |
WORKDIR /app/owl
|
92 |
|
93 |
+
# 设置适当的权限 | Set appropriate permissions
|
94 |
RUN chown -R owl:owl /app
|
95 |
RUN mkdir -p /root/.cache && chown -R owl:owl /root/.cache
|
96 |
|
97 |
+
# 切换到非root用户 | Switch to non-root user
|
98 |
+
# 注意:如果需要访问/dev/shm,可能仍需要root用户 | Note: If you need to access /dev/shm, you may still need root user
|
99 |
# USER owl
|
100 |
|
101 |
+
# 添加健康检查 | Add health check
|
102 |
HEALTHCHECK --interval=30s --timeout=10s --start-period=5s --retries=3 \
|
103 |
CMD python -c "import sys; sys.exit(0 if __import__('os').path.exists('/app/owl') else 1)"
|
104 |
|
105 |
+
# 容器启动命令 | Container startup command
|
106 |
+
CMD ["/bin/bash", "-c", "owl-welcome && /bin/bash"]
|
.container/build_docker.bat
CHANGED
@@ -1,14 +1,14 @@
|
|
1 |
@echo off
|
2 |
setlocal enabledelayedexpansion
|
3 |
|
4 |
-
echo 在Windows上构建Docker镜像...
|
5 |
|
6 |
-
REM 设置配置变量
|
7 |
set CACHE_DIR=.docker-cache\pip
|
8 |
set BUILD_ARGS=--build-arg BUILDKIT_INLINE_CACHE=1
|
9 |
set COMPOSE_FILE=docker-compose.yml
|
10 |
|
11 |
-
REM 解析命令行参数
|
12 |
set CLEAN_CACHE=0
|
13 |
set REBUILD=0
|
14 |
set SERVICE=
|
@@ -32,80 +32,80 @@ if /i "%~1"=="--service" (
|
|
32 |
goto :parse_args
|
33 |
)
|
34 |
if /i "%~1"=="--help" (
|
35 |
-
echo
|
36 |
-
echo
|
37 |
-
echo --clean 清理缓存目录
|
38 |
-
echo --rebuild 强制重新构建镜像
|
39 |
-
echo --service 指定要构建的服务名称
|
40 |
-
echo --help 显示此帮助信息
|
41 |
exit /b 0
|
42 |
)
|
43 |
shift
|
44 |
goto :parse_args
|
45 |
:end_parse_args
|
46 |
|
47 |
-
REM 检查Docker是否安装
|
48 |
where docker >nul 2>nul
|
49 |
if %ERRORLEVEL% NEQ 0 (
|
50 |
-
echo
|
51 |
-
echo 请先安装Docker Desktop: https://docs.docker.com/desktop/install/windows-install/
|
52 |
pause
|
53 |
exit /b 1
|
54 |
)
|
55 |
|
56 |
-
REM 检查Docker是否运行
|
57 |
docker info >nul 2>nul
|
58 |
if %ERRORLEVEL% NEQ 0 (
|
59 |
-
echo
|
60 |
-
echo 请启动Docker Desktop应用程序
|
61 |
pause
|
62 |
exit /b 1
|
63 |
)
|
64 |
|
65 |
-
REM 检查docker-compose.yml文件是否存在
|
66 |
if not exist "%COMPOSE_FILE%" (
|
67 |
-
echo
|
68 |
-
echo 请确保在正确的目录中运行此脚本
|
69 |
pause
|
70 |
exit /b 1
|
71 |
)
|
72 |
|
73 |
-
REM 检查Docker Compose命令
|
74 |
where docker-compose >nul 2>nul
|
75 |
if %ERRORLEVEL% EQU 0 (
|
76 |
set COMPOSE_CMD=docker-compose
|
77 |
) else (
|
78 |
-
echo 尝试使用新的docker compose命令...
|
79 |
docker compose version >nul 2>nul
|
80 |
if %ERRORLEVEL% EQU 0 (
|
81 |
set COMPOSE_CMD=docker compose
|
82 |
) else (
|
83 |
-
echo
|
84 |
-
echo 请确保Docker Desktop已正确安装
|
85 |
pause
|
86 |
exit /b 1
|
87 |
)
|
88 |
)
|
89 |
|
90 |
-
REM 设置Docker BuildKit环境变量
|
91 |
set DOCKER_BUILDKIT=1
|
92 |
set COMPOSE_DOCKER_CLI_BUILD=1
|
93 |
|
94 |
-
echo 启用Docker BuildKit加速构建...
|
95 |
|
96 |
-
REM 清理缓存(如果指定)
|
97 |
if %CLEAN_CACHE% EQU 1 (
|
98 |
-
echo 清理缓存目录...
|
99 |
if exist "%CACHE_DIR%" rmdir /s /q "%CACHE_DIR%"
|
100 |
)
|
101 |
|
102 |
-
REM 创建缓存目录
|
103 |
if not exist "%CACHE_DIR%" (
|
104 |
-
echo 创建缓存目录...
|
105 |
mkdir "%CACHE_DIR%"
|
106 |
)
|
107 |
|
108 |
-
REM 添加构建时间标记
|
109 |
for /f "tokens=2 delims==" %%a in ('wmic OS Get localdatetime /value') do set "dt=%%a"
|
110 |
set "YEAR=%dt:~0,4%"
|
111 |
set "MONTH=%dt:~4,2%"
|
@@ -115,33 +115,33 @@ set "MINUTE=%dt:~10,2%"
|
|
115 |
set "BUILD_TIME=%YEAR%%MONTH%%DAY%_%HOUR%%MINUTE%"
|
116 |
set "BUILD_ARGS=%BUILD_ARGS% --build-arg BUILD_TIME=%BUILD_TIME%"
|
117 |
|
118 |
-
REM 构建Docker镜像
|
119 |
-
echo 开始构建Docker镜像...
|
120 |
|
121 |
if "%SERVICE%"=="" (
|
122 |
if %REBUILD% EQU 1 (
|
123 |
-
echo 强制重新构建所有服务...
|
124 |
%COMPOSE_CMD% build --no-cache %BUILD_ARGS%
|
125 |
) else (
|
126 |
%COMPOSE_CMD% build %BUILD_ARGS%
|
127 |
)
|
128 |
) else (
|
129 |
if %REBUILD% EQU 1 (
|
130 |
-
echo 强制重新构建服务 %SERVICE%...
|
131 |
%COMPOSE_CMD% build --no-cache %BUILD_ARGS% %SERVICE%
|
132 |
) else (
|
133 |
-
echo 构建服务 %SERVICE%...
|
134 |
%COMPOSE_CMD% build %BUILD_ARGS% %SERVICE%
|
135 |
)
|
136 |
)
|
137 |
|
138 |
if %ERRORLEVEL% EQU 0 (
|
139 |
-
echo Docker镜像构建成功!
|
140 |
-
echo
|
141 |
-
echo 可以使用以下命令启动容器:
|
142 |
echo %COMPOSE_CMD% up -d
|
143 |
) else (
|
144 |
-
echo Docker镜像构建失败,请检查错误信息。
|
145 |
)
|
146 |
|
147 |
-
pause
|
|
|
1 |
@echo off
|
2 |
setlocal enabledelayedexpansion
|
3 |
|
4 |
+
echo 在Windows上构建Docker镜像... | Building Docker image on Windows...
|
5 |
|
6 |
+
REM 设置配置变量 | Set configuration variables
|
7 |
set CACHE_DIR=.docker-cache\pip
|
8 |
set BUILD_ARGS=--build-arg BUILDKIT_INLINE_CACHE=1
|
9 |
set COMPOSE_FILE=docker-compose.yml
|
10 |
|
11 |
+
REM 解析命令行参数 | Parse command line arguments
|
12 |
set CLEAN_CACHE=0
|
13 |
set REBUILD=0
|
14 |
set SERVICE=
|
|
|
32 |
goto :parse_args
|
33 |
)
|
34 |
if /i "%~1"=="--help" (
|
35 |
+
echo 用法 | Usage: build_docker.bat [选项 | options]
|
36 |
+
echo 选项 | Options:
|
37 |
+
echo --clean 清理缓存目录 | Clean cache directory
|
38 |
+
echo --rebuild 强制重新构建镜像 | Force rebuild image
|
39 |
+
echo --service 指定要构建的服务名称 | Specify service name to build
|
40 |
+
echo --help 显示此帮助信息 | Show this help message
|
41 |
exit /b 0
|
42 |
)
|
43 |
shift
|
44 |
goto :parse_args
|
45 |
:end_parse_args
|
46 |
|
47 |
+
REM 检查Docker是否安装 | Check if Docker is installed
|
48 |
where docker >nul 2>nul
|
49 |
if %ERRORLEVEL% NEQ 0 (
|
50 |
+
echo 错误 | Error: Docker未安装 | Docker not installed
|
51 |
+
echo 请先安装Docker Desktop | Please install Docker Desktop first: https://docs.docker.com/desktop/install/windows-install/
|
52 |
pause
|
53 |
exit /b 1
|
54 |
)
|
55 |
|
56 |
+
REM 检查Docker是否运行 | Check if Docker is running
|
57 |
docker info >nul 2>nul
|
58 |
if %ERRORLEVEL% NEQ 0 (
|
59 |
+
echo 错误 | Error: Docker未运行 | Docker not running
|
60 |
+
echo 请启动Docker Desktop应用程序 | Please start Docker Desktop application
|
61 |
pause
|
62 |
exit /b 1
|
63 |
)
|
64 |
|
65 |
+
REM 检查docker-compose.yml文件是否存在 | Check if docker-compose.yml file exists
|
66 |
if not exist "%COMPOSE_FILE%" (
|
67 |
+
echo 错误 | Error: 未找到%COMPOSE_FILE%文件 | %COMPOSE_FILE% file not found
|
68 |
+
echo 请确保在正确的目录中运行此脚本 | Please make sure you are running this script in the correct directory
|
69 |
pause
|
70 |
exit /b 1
|
71 |
)
|
72 |
|
73 |
+
REM 检查Docker Compose命令 | Check Docker Compose command
|
74 |
where docker-compose >nul 2>nul
|
75 |
if %ERRORLEVEL% EQU 0 (
|
76 |
set COMPOSE_CMD=docker-compose
|
77 |
) else (
|
78 |
+
echo 尝试使用新的docker compose命令... | Trying to use new docker compose command...
|
79 |
docker compose version >nul 2>nul
|
80 |
if %ERRORLEVEL% EQU 0 (
|
81 |
set COMPOSE_CMD=docker compose
|
82 |
) else (
|
83 |
+
echo 错误 | Error: 未找到Docker Compose命令 | Docker Compose command not found
|
84 |
+
echo 请确保Docker Desktop已正确安装 | Please make sure Docker Desktop is properly installed
|
85 |
pause
|
86 |
exit /b 1
|
87 |
)
|
88 |
)
|
89 |
|
90 |
+
REM 设置Docker BuildKit环境变量 | Set Docker BuildKit environment variables
|
91 |
set DOCKER_BUILDKIT=1
|
92 |
set COMPOSE_DOCKER_CLI_BUILD=1
|
93 |
|
94 |
+
echo 启用Docker BuildKit加速构建... | Enabling Docker BuildKit to accelerate build...
|
95 |
|
96 |
+
REM 清理缓存(如果指定) | Clean cache (if specified)
|
97 |
if %CLEAN_CACHE% EQU 1 (
|
98 |
+
echo 清理缓存目录... | Cleaning cache directory...
|
99 |
if exist "%CACHE_DIR%" rmdir /s /q "%CACHE_DIR%"
|
100 |
)
|
101 |
|
102 |
+
REM 创建缓存目录 | Create cache directory
|
103 |
if not exist "%CACHE_DIR%" (
|
104 |
+
echo 创建缓存目录... | Creating cache directory...
|
105 |
mkdir "%CACHE_DIR%"
|
106 |
)
|
107 |
|
108 |
+
REM 添加构建时间标记 | Add build time tag
|
109 |
for /f "tokens=2 delims==" %%a in ('wmic OS Get localdatetime /value') do set "dt=%%a"
|
110 |
set "YEAR=%dt:~0,4%"
|
111 |
set "MONTH=%dt:~4,2%"
|
|
|
115 |
set "BUILD_TIME=%YEAR%%MONTH%%DAY%_%HOUR%%MINUTE%"
|
116 |
set "BUILD_ARGS=%BUILD_ARGS% --build-arg BUILD_TIME=%BUILD_TIME%"
|
117 |
|
118 |
+
REM 构建Docker镜像 | Build Docker image
|
119 |
+
echo 开始构建Docker镜像... | Starting to build Docker image...
|
120 |
|
121 |
if "%SERVICE%"=="" (
|
122 |
if %REBUILD% EQU 1 (
|
123 |
+
echo 强制重新构建所有服务... | Force rebuilding all services...
|
124 |
%COMPOSE_CMD% build --no-cache %BUILD_ARGS%
|
125 |
) else (
|
126 |
%COMPOSE_CMD% build %BUILD_ARGS%
|
127 |
)
|
128 |
) else (
|
129 |
if %REBUILD% EQU 1 (
|
130 |
+
echo 强制重新构建服务 %SERVICE%... | Force rebuilding service %SERVICE%...
|
131 |
%COMPOSE_CMD% build --no-cache %BUILD_ARGS% %SERVICE%
|
132 |
) else (
|
133 |
+
echo 构建服务 %SERVICE%... | Building service %SERVICE%...
|
134 |
%COMPOSE_CMD% build %BUILD_ARGS% %SERVICE%
|
135 |
)
|
136 |
)
|
137 |
|
138 |
if %ERRORLEVEL% EQU 0 (
|
139 |
+
echo Docker镜像构建成功! | Docker image build successful!
|
140 |
+
echo 构建时间 | Build time: %BUILD_TIME%
|
141 |
+
echo 可以使用以下命令启动容器: | You can use the following command to start the container:
|
142 |
echo %COMPOSE_CMD% up -d
|
143 |
) else (
|
144 |
+
echo Docker镜像构建失败,请检查错误信息。 | Docker image build failed, please check error messages.
|
145 |
)
|
146 |
|
147 |
+
pause
|
.container/build_docker.sh
CHANGED
@@ -1,6 +1,6 @@
|
|
1 |
#!/bin/bash
|
2 |
|
3 |
-
# 设置配置变量
|
4 |
CACHE_DIR=".docker-cache/pip"
|
5 |
BUILD_ARGS="--build-arg BUILDKIT_INLINE_CACHE=1"
|
6 |
COMPOSE_FILE="docker-compose.yml"
|
@@ -8,7 +8,7 @@ CLEAN_CACHE=0
|
|
8 |
REBUILD=0
|
9 |
SERVICE=""
|
10 |
|
11 |
-
# 解析命令行参数
|
12 |
while [[ $# -gt 0 ]]; do
|
13 |
case "$1" in
|
14 |
--clean)
|
@@ -24,127 +24,127 @@ while [[ $# -gt 0 ]]; do
|
|
24 |
shift 2
|
25 |
;;
|
26 |
--help)
|
27 |
-
echo "
|
28 |
-
echo "
|
29 |
-
echo " --clean 清理缓存目录"
|
30 |
-
echo " --rebuild 强制重新构建镜像"
|
31 |
-
echo " --service 指定要构建的服务名称"
|
32 |
-
echo " --help 显示此帮助信息"
|
33 |
exit 0
|
34 |
;;
|
35 |
*)
|
36 |
-
echo "
|
37 |
-
echo "使用 --help 查看帮助"
|
38 |
exit 1
|
39 |
;;
|
40 |
esac
|
41 |
done
|
42 |
|
43 |
-
# 检测操作系统类型
|
44 |
OS_TYPE=$(uname -s)
|
45 |
-
echo "
|
46 |
|
47 |
-
# 检查Docker是否安装
|
48 |
if ! command -v docker &> /dev/null; then
|
49 |
-
echo "
|
50 |
-
echo "请先安装Docker: https://docs.docker.com/get-docker/"
|
51 |
exit 1
|
52 |
fi
|
53 |
|
54 |
-
# 检查Docker是否运行
|
55 |
if ! docker info &> /dev/null; then
|
56 |
-
echo "
|
57 |
-
echo "请启动Docker服务"
|
58 |
exit 1
|
59 |
fi
|
60 |
|
61 |
-
# 检查docker-compose.yml文件是否存在
|
62 |
if [ ! -f "$COMPOSE_FILE" ]; then
|
63 |
-
echo "
|
64 |
-
echo "请确保在正确的目录中运行此脚本"
|
65 |
exit 1
|
66 |
fi
|
67 |
|
68 |
-
# 设置Docker BuildKit环境变量
|
69 |
export DOCKER_BUILDKIT=1
|
70 |
export COMPOSE_DOCKER_CLI_BUILD=1
|
71 |
|
72 |
-
echo "启用Docker BuildKit加速构建..."
|
73 |
|
74 |
-
# 清理缓存(如果指定)
|
75 |
if [ $CLEAN_CACHE -eq 1 ]; then
|
76 |
-
echo "清理缓存目录..."
|
77 |
rm -rf "$CACHE_DIR"
|
78 |
fi
|
79 |
|
80 |
-
# 创建缓存目录
|
81 |
mkdir -p "$CACHE_DIR"
|
82 |
|
83 |
-
# 添加构建时间标记
|
84 |
BUILD_TIME=$(date +"%Y%m%d_%H%M%S")
|
85 |
BUILD_ARGS="$BUILD_ARGS --build-arg BUILD_TIME=$BUILD_TIME"
|
86 |
|
87 |
-
# 获取脚本所在目录
|
88 |
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
89 |
-
# 获取项目根目录(脚本所在目录的父目录)
|
90 |
PROJECT_ROOT="$(dirname "$SCRIPT_DIR")"
|
91 |
|
92 |
-
echo "
|
93 |
-
echo "
|
94 |
|
95 |
-
# 切换到项目根目录
|
96 |
cd "$PROJECT_ROOT"
|
97 |
|
98 |
-
# 检查Docker Compose命令
|
99 |
if command -v docker-compose &> /dev/null; then
|
100 |
COMPOSE_CMD="docker-compose"
|
101 |
-
echo "使用 docker-compose 命令"
|
102 |
elif docker compose version &> /dev/null; then
|
103 |
COMPOSE_CMD="docker compose"
|
104 |
-
echo "使用 docker compose 命令"
|
105 |
else
|
106 |
-
echo "
|
107 |
-
echo "请安装Docker Compose: https://docs.docker.com/compose/install/"
|
108 |
exit 1
|
109 |
fi
|
110 |
|
111 |
-
# 检测CPU核心数,用于并行构建
|
112 |
CPU_CORES=$(grep -c ^processor /proc/cpuinfo 2>/dev/null || sysctl -n hw.ncpu 2>/dev/null || echo 2)
|
113 |
if [ $CPU_CORES -gt 2 ]; then
|
114 |
PARALLEL_FLAG="--parallel"
|
115 |
-
echo "检测到${CPU_CORES}个CPU核心,启用并行构建..."
|
116 |
else
|
117 |
PARALLEL_FLAG=""
|
118 |
fi
|
119 |
|
120 |
-
# 构建命令基础部分
|
121 |
BUILD_CMD="$COMPOSE_CMD -f \"$SCRIPT_DIR/docker-compose.yml\" build $PARALLEL_FLAG --build-arg BUILDKIT_INLINE_CACHE=1"
|
122 |
|
123 |
-
# 根据操作系统类型执行不同的命令
|
124 |
if [[ "$OS_TYPE" == "Darwin" ]]; then
|
125 |
# macOS
|
126 |
-
echo "在macOS上构建Docker镜像..."
|
127 |
eval $BUILD_CMD
|
128 |
elif [[ "$OS_TYPE" == "Linux" ]]; then
|
129 |
# Linux
|
130 |
-
echo "在Linux上构建Docker镜像..."
|
131 |
eval $BUILD_CMD
|
132 |
elif [[ "$OS_TYPE" == MINGW* ]] || [[ "$OS_TYPE" == CYGWIN* ]] || [[ "$OS_TYPE" == MSYS* ]]; then
|
133 |
# Windows
|
134 |
-
echo "在Windows上构建Docker镜像..."
|
135 |
eval $BUILD_CMD
|
136 |
else
|
137 |
-
echo "未知操作系统,尝试使用标准命令构建..."
|
138 |
eval $BUILD_CMD
|
139 |
fi
|
140 |
|
141 |
-
# 检查构建结果
|
142 |
if [ $? -eq 0 ]; then
|
143 |
-
echo "Docker镜像构建成功!"
|
144 |
-
echo "
|
145 |
-
echo "可以使用以下命令启动容器:"
|
146 |
echo "$COMPOSE_CMD -f \"$SCRIPT_DIR/docker-compose.yml\" up -d"
|
147 |
else
|
148 |
-
echo "Docker镜像构建失败,请检查错误信息。"
|
149 |
exit 1
|
150 |
-
fi
|
|
|
1 |
#!/bin/bash
|
2 |
|
3 |
+
# 设置配置变量 | Set configuration variables
|
4 |
CACHE_DIR=".docker-cache/pip"
|
5 |
BUILD_ARGS="--build-arg BUILDKIT_INLINE_CACHE=1"
|
6 |
COMPOSE_FILE="docker-compose.yml"
|
|
|
8 |
REBUILD=0
|
9 |
SERVICE=""
|
10 |
|
11 |
+
# 解析命令行参数 | Parse command line arguments
|
12 |
while [[ $# -gt 0 ]]; do
|
13 |
case "$1" in
|
14 |
--clean)
|
|
|
24 |
shift 2
|
25 |
;;
|
26 |
--help)
|
27 |
+
echo "用法 | Usage: ./build_docker.sh [选项 | options]"
|
28 |
+
echo "选项 | Options:"
|
29 |
+
echo " --clean 清理缓存目录 | Clean cache directory"
|
30 |
+
echo " --rebuild 强制重新构建镜像 | Force rebuild image"
|
31 |
+
echo " --service 指定要构建的服务名称 | Specify service name to build"
|
32 |
+
echo " --help 显示此帮助信息 | Show this help message"
|
33 |
exit 0
|
34 |
;;
|
35 |
*)
|
36 |
+
echo "未知选项 | Unknown option: $1"
|
37 |
+
echo "使用 --help 查看帮助 | Use --help to see help"
|
38 |
exit 1
|
39 |
;;
|
40 |
esac
|
41 |
done
|
42 |
|
43 |
+
# 检测操作系统类型 | Detect operating system type
|
44 |
OS_TYPE=$(uname -s)
|
45 |
+
echo "检测到操作系统 | Detected OS: $OS_TYPE"
|
46 |
|
47 |
+
# 检查Docker是否安装 | Check if Docker is installed
|
48 |
if ! command -v docker &> /dev/null; then
|
49 |
+
echo "错误 | Error: Docker未安装 | Docker not installed"
|
50 |
+
echo "请先安装Docker | Please install Docker first: https://docs.docker.com/get-docker/"
|
51 |
exit 1
|
52 |
fi
|
53 |
|
54 |
+
# 检查Docker是否运行 | Check if Docker is running
|
55 |
if ! docker info &> /dev/null; then
|
56 |
+
echo "错误 | Error: Docker未运行 | Docker not running"
|
57 |
+
echo "请启动Docker服务 | Please start Docker service"
|
58 |
exit 1
|
59 |
fi
|
60 |
|
61 |
+
# 检查docker-compose.yml文件是否存在 | Check if docker-compose.yml file exists
|
62 |
if [ ! -f "$COMPOSE_FILE" ]; then
|
63 |
+
echo "错误 | Error: 未找到$COMPOSE_FILE文件 | $COMPOSE_FILE file not found"
|
64 |
+
echo "请确保在正确的目录中运行此脚本 | Please make sure you are running this script in the correct directory"
|
65 |
exit 1
|
66 |
fi
|
67 |
|
68 |
+
# 设置Docker BuildKit环境变量 | Set Docker BuildKit environment variables
|
69 |
export DOCKER_BUILDKIT=1
|
70 |
export COMPOSE_DOCKER_CLI_BUILD=1
|
71 |
|
72 |
+
echo "启用Docker BuildKit加速构建... | Enabling Docker BuildKit to accelerate build..."
|
73 |
|
74 |
+
# 清理缓存(如果指定) | Clean cache (if specified)
|
75 |
if [ $CLEAN_CACHE -eq 1 ]; then
|
76 |
+
echo "清理缓存目录... | Cleaning cache directory..."
|
77 |
rm -rf "$CACHE_DIR"
|
78 |
fi
|
79 |
|
80 |
+
# 创建缓存目录 | Create cache directory
|
81 |
mkdir -p "$CACHE_DIR"
|
82 |
|
83 |
+
# 添加构建时间标记 | Add build time tag
|
84 |
BUILD_TIME=$(date +"%Y%m%d_%H%M%S")
|
85 |
BUILD_ARGS="$BUILD_ARGS --build-arg BUILD_TIME=$BUILD_TIME"
|
86 |
|
87 |
+
# 获取脚本所在目录 | Get script directory
|
88 |
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
89 |
+
# 获取项目根目录(脚本所在目录的父目录) | Get project root directory (parent directory of script directory)
|
90 |
PROJECT_ROOT="$(dirname "$SCRIPT_DIR")"
|
91 |
|
92 |
+
echo "脚本目录 | Script directory: $SCRIPT_DIR"
|
93 |
+
echo "项目根目录 | Project root directory: $PROJECT_ROOT"
|
94 |
|
95 |
+
# 切换到项目根目录 | Change to project root directory
|
96 |
cd "$PROJECT_ROOT"
|
97 |
|
98 |
+
# 检查Docker Compose命令 | Check Docker Compose command
|
99 |
if command -v docker-compose &> /dev/null; then
|
100 |
COMPOSE_CMD="docker-compose"
|
101 |
+
echo "使用 docker-compose 命令 | Using docker-compose command"
|
102 |
elif docker compose version &> /dev/null; then
|
103 |
COMPOSE_CMD="docker compose"
|
104 |
+
echo "使用 docker compose 命令 | Using docker compose command"
|
105 |
else
|
106 |
+
echo "错误 | Error: 未找到Docker Compose命令 | Docker Compose command not found"
|
107 |
+
echo "请安装Docker Compose | Please install Docker Compose: https://docs.docker.com/compose/install/"
|
108 |
exit 1
|
109 |
fi
|
110 |
|
111 |
+
# 检测CPU核心数,用于并行构建 | Detect CPU cores for parallel build
|
112 |
CPU_CORES=$(grep -c ^processor /proc/cpuinfo 2>/dev/null || sysctl -n hw.ncpu 2>/dev/null || echo 2)
|
113 |
if [ $CPU_CORES -gt 2 ]; then
|
114 |
PARALLEL_FLAG="--parallel"
|
115 |
+
echo "检测到${CPU_CORES}个CPU核心,启用并行构建... | Detected ${CPU_CORES} CPU cores, enabling parallel build..."
|
116 |
else
|
117 |
PARALLEL_FLAG=""
|
118 |
fi
|
119 |
|
120 |
+
# 构建命令基础部分 | Base part of build command
|
121 |
BUILD_CMD="$COMPOSE_CMD -f \"$SCRIPT_DIR/docker-compose.yml\" build $PARALLEL_FLAG --build-arg BUILDKIT_INLINE_CACHE=1"
|
122 |
|
123 |
+
# 根据操作系统类型执行不同的命令 | Execute different commands based on OS type
|
124 |
if [[ "$OS_TYPE" == "Darwin" ]]; then
|
125 |
# macOS
|
126 |
+
echo "在macOS上构建Docker镜像... | Building Docker image on macOS..."
|
127 |
eval $BUILD_CMD
|
128 |
elif [[ "$OS_TYPE" == "Linux" ]]; then
|
129 |
# Linux
|
130 |
+
echo "在Linux上构建Docker镜像... | Building Docker image on Linux..."
|
131 |
eval $BUILD_CMD
|
132 |
elif [[ "$OS_TYPE" == MINGW* ]] || [[ "$OS_TYPE" == CYGWIN* ]] || [[ "$OS_TYPE" == MSYS* ]]; then
|
133 |
# Windows
|
134 |
+
echo "在Windows上构建Docker镜像... | Building Docker image on Windows..."
|
135 |
eval $BUILD_CMD
|
136 |
else
|
137 |
+
echo "未知操作系统,尝试使用标准命令构建... | Unknown OS, trying to build with standard command..."
|
138 |
eval $BUILD_CMD
|
139 |
fi
|
140 |
|
141 |
+
# 检查构建结果 | Check build result
|
142 |
if [ $? -eq 0 ]; then
|
143 |
+
echo "Docker镜像构建成功! | Docker image build successful!"
|
144 |
+
echo "构建时间 | Build time: $BUILD_TIME"
|
145 |
+
echo "可以使用以下命令启动容器: | You can use the following command to start the container:"
|
146 |
echo "$COMPOSE_CMD -f \"$SCRIPT_DIR/docker-compose.yml\" up -d"
|
147 |
else
|
148 |
+
echo "Docker镜像构建失败,请检查错误信息。 | Docker image build failed, please check error messages."
|
149 |
exit 1
|
150 |
+
fi
|
.container/check_docker.bat
CHANGED
@@ -1,62 +1,62 @@
|
|
1 |
@echo off
|
2 |
-
echo 检查Docker环境...
|
3 |
|
4 |
-
REM 检查Docker是否安装
|
5 |
where docker >nul 2>nul
|
6 |
if %ERRORLEVEL% NEQ 0 (
|
7 |
-
echo
|
8 |
-
echo 在Windows上安装Docker
|
9 |
-
echo 1. 访问 https://docs.docker.com/desktop/install/windows-install/ 下载Docker Desktop
|
10 |
-
echo 2. 安装并启动Docker Desktop
|
11 |
pause
|
12 |
exit /b 1
|
13 |
)
|
14 |
|
15 |
-
echo Docker已安装
|
16 |
|
17 |
-
REM 检查Docker Compose是否安装
|
18 |
where docker-compose >nul 2>nul
|
19 |
if %ERRORLEVEL% NEQ 0 (
|
20 |
-
echo
|
21 |
docker compose version >nul 2>nul
|
22 |
if %ERRORLEVEL% NEQ 0 (
|
23 |
-
echo
|
24 |
-
echo Docker Desktop for Windows应该已包含Docker Compose
|
25 |
-
echo 请确保Docker Desktop已正确安装
|
26 |
pause
|
27 |
exit /b 1
|
28 |
) else (
|
29 |
-
echo 使用新的docker compose命令
|
30 |
set COMPOSE_CMD=docker compose
|
31 |
)
|
32 |
) else (
|
33 |
-
echo Docker-Compose已安装
|
34 |
set COMPOSE_CMD=docker-compose
|
35 |
)
|
36 |
|
37 |
-
REM 检查Docker是否正在运行
|
38 |
docker info >nul 2>nul
|
39 |
if %ERRORLEVEL% NEQ 0 (
|
40 |
-
echo
|
41 |
-
echo 请启动Docker Desktop应用程序
|
42 |
pause
|
43 |
exit /b 1
|
44 |
)
|
45 |
|
46 |
-
echo Docker正在运行
|
47 |
|
48 |
-
REM 检查是否有.env文件
|
49 |
if not exist "owl\.env" (
|
50 |
-
echo
|
51 |
-
echo
|
52 |
echo copy owl\.env_template owl\.env
|
53 |
-
echo 然后编辑owl\.env文件,填写必要的API密钥
|
54 |
) else (
|
55 |
-
echo 环境变量文件已存在
|
56 |
)
|
57 |
|
58 |
-
echo 所有检查完成,您的系统已准备好构建和运行OWL项目的Docker容器
|
59 |
-
echo 请运行以下命令构建Docker
|
60 |
echo %COMPOSE_CMD% build
|
61 |
|
62 |
-
pause
|
|
|
1 |
@echo off
|
2 |
+
echo 检查Docker环境... | Checking Docker environment...
|
3 |
|
4 |
+
REM 检查Docker是否安装 | Check if Docker is installed
|
5 |
where docker >nul 2>nul
|
6 |
if %ERRORLEVEL% NEQ 0 (
|
7 |
+
echo 错误 | Error: Docker未安装 | Docker not installed
|
8 |
+
echo 在Windows上安装Docker的方法 | How to install Docker on Windows:
|
9 |
+
echo 1. 访问 | Visit https://docs.docker.com/desktop/install/windows-install/ 下载Docker Desktop | to download Docker Desktop
|
10 |
+
echo 2. 安装并启动Docker Desktop | Install and start Docker Desktop
|
11 |
pause
|
12 |
exit /b 1
|
13 |
)
|
14 |
|
15 |
+
echo Docker已安装 | Docker is installed
|
16 |
|
17 |
+
REM 检查Docker Compose是否安装 | Check if Docker Compose is installed
|
18 |
where docker-compose >nul 2>nul
|
19 |
if %ERRORLEVEL% NEQ 0 (
|
20 |
+
echo 警告 | Warning: Docker-Compose未找到,尝试使用新的docker compose命令 | Docker-Compose not found, trying to use new docker compose command
|
21 |
docker compose version >nul 2>nul
|
22 |
if %ERRORLEVEL% NEQ 0 (
|
23 |
+
echo 错误 | Error: Docker Compose未安装 | Docker Compose not installed
|
24 |
+
echo Docker Desktop for Windows应该已包含Docker Compose | Docker Desktop for Windows should already include Docker Compose
|
25 |
+
echo 请确保Docker Desktop已正确安装 | Please make sure Docker Desktop is properly installed
|
26 |
pause
|
27 |
exit /b 1
|
28 |
) else (
|
29 |
+
echo 使用新的docker compose命令 | Using new docker compose command
|
30 |
set COMPOSE_CMD=docker compose
|
31 |
)
|
32 |
) else (
|
33 |
+
echo Docker-Compose已安装 | Docker-Compose is installed
|
34 |
set COMPOSE_CMD=docker-compose
|
35 |
)
|
36 |
|
37 |
+
REM 检查Docker是否正在运行 | Check if Docker is running
|
38 |
docker info >nul 2>nul
|
39 |
if %ERRORLEVEL% NEQ 0 (
|
40 |
+
echo 错误 | Error: Docker未运行 | Docker not running
|
41 |
+
echo 请启动Docker Desktop应用程序 | Please start Docker Desktop application
|
42 |
pause
|
43 |
exit /b 1
|
44 |
)
|
45 |
|
46 |
+
echo Docker正在运行 | Docker is running
|
47 |
|
48 |
+
REM 检查是否有.env文件 | Check if .env file exists
|
49 |
if not exist "owl\.env" (
|
50 |
+
echo 警告 | Warning: 未找到owl\.env文件 | owl\.env file not found
|
51 |
+
echo 请运行以下命令创建环境变量文件 | Please run the following command to create environment variable file:
|
52 |
echo copy owl\.env_template owl\.env
|
53 |
+
echo 然后编辑owl\.env文件,填写必要的API密钥 | Then edit owl\.env file and fill in necessary API keys
|
54 |
) else (
|
55 |
+
echo 环境变量文件已存在 | Environment variable file exists
|
56 |
)
|
57 |
|
58 |
+
echo 所有检查完成,您的系统已准备好构建和运行OWL项目的Docker容器 | All checks completed, your system is ready to build and run OWL project Docker container
|
59 |
+
echo 请运行以下命令构建Docker镜像 | Please run the following command to build Docker image:
|
60 |
echo %COMPOSE_CMD% build
|
61 |
|
62 |
+
pause
|
.container/check_docker.sh
CHANGED
@@ -1,92 +1,92 @@
|
|
1 |
#!/bin/bash
|
2 |
|
3 |
-
# 检测操作系统类型
|
4 |
OS_TYPE=$(uname -s)
|
5 |
-
echo "
|
6 |
|
7 |
-
# 检查Docker是否安装
|
8 |
if ! command -v docker &> /dev/null; then
|
9 |
-
echo "
|
10 |
|
11 |
if [[ "$OS_TYPE" == "Darwin" ]]; then
|
12 |
-
echo "在macOS上安装Docker
|
13 |
-
echo "1. 访问 https://docs.docker.com/desktop/install/mac-install/ 下载Docker Desktop"
|
14 |
-
echo "2. 安装并启动Docker Desktop"
|
15 |
elif [[ "$OS_TYPE" == "Linux" ]]; then
|
16 |
-
echo "在Linux上安装Docker
|
17 |
-
echo "1.
|
18 |
echo " sudo apt-get update"
|
19 |
echo " sudo apt-get install docker.io docker-compose"
|
20 |
-
echo "2. 启动Docker
|
21 |
echo " sudo systemctl start docker"
|
22 |
echo " sudo systemctl enable docker"
|
23 |
elif [[ "$OS_TYPE" == MINGW* ]] || [[ "$OS_TYPE" == CYGWIN* ]] || [[ "$OS_TYPE" == MSYS* ]]; then
|
24 |
-
echo "在Windows上安装Docker
|
25 |
-
echo "1. 访问 https://docs.docker.com/desktop/install/windows-install/ 下载Docker Desktop"
|
26 |
-
echo "2. 安装并启动Docker Desktop"
|
27 |
fi
|
28 |
|
29 |
exit 1
|
30 |
fi
|
31 |
|
32 |
-
echo "Docker已安装"
|
33 |
|
34 |
-
# 检查Docker Compose是否安装
|
35 |
if ! command -v docker-compose &> /dev/null; then
|
36 |
-
echo "
|
37 |
|
38 |
if [[ "$OS_TYPE" == "Darwin" ]]; then
|
39 |
-
echo "Docker Desktop for Mac已包含Docker Compose"
|
40 |
elif [[ "$OS_TYPE" == "Linux" ]]; then
|
41 |
-
echo "在Linux上安装Docker Compose
|
42 |
-
echo "1.
|
43 |
echo " sudo apt-get install docker-compose"
|
44 |
elif [[ "$OS_TYPE" == MINGW* ]] || [[ "$OS_TYPE" == CYGWIN* ]] || [[ "$OS_TYPE" == MSYS* ]]; then
|
45 |
-
echo "Docker Desktop for Windows已包含Docker Compose"
|
46 |
fi
|
47 |
|
48 |
exit 1
|
49 |
fi
|
50 |
|
51 |
-
echo "Docker Compose已安装"
|
52 |
|
53 |
-
# 检查Docker是否正在运行
|
54 |
if ! docker info &> /dev/null; then
|
55 |
-
echo "
|
56 |
|
57 |
if [[ "$OS_TYPE" == "Darwin" ]]; then
|
58 |
-
echo "请启动Docker Desktop应用程序"
|
59 |
elif [[ "$OS_TYPE" == "Linux" ]]; then
|
60 |
-
echo "请运行以下命令启动Docker
|
61 |
echo "sudo systemctl start docker"
|
62 |
elif [[ "$OS_TYPE" == MINGW* ]] || [[ "$OS_TYPE" == CYGWIN* ]] || [[ "$OS_TYPE" == MSYS* ]]; then
|
63 |
-
echo "请启动Docker Desktop应用程序"
|
64 |
fi
|
65 |
|
66 |
exit 1
|
67 |
fi
|
68 |
|
69 |
-
echo "Docker正在运行"
|
70 |
|
71 |
-
# 检查是否有足够的磁盘空间
|
72 |
FREE_SPACE=$(df -h . | awk 'NR==2 {print $4}')
|
73 |
-
echo "
|
74 |
|
75 |
-
# 检查是否有.env文件
|
76 |
if [ ! -f "owl/.env" ]; then
|
77 |
-
echo "
|
78 |
-
echo "
|
79 |
echo "cp owl/.env_template owl/.env"
|
80 |
-
echo "然后编辑owl/.env文件,填写必要的API密钥"
|
81 |
else
|
82 |
-
echo "环境变量文件已存在"
|
83 |
fi
|
84 |
|
85 |
-
echo "所有检查完成,您的系统已准备好构建和运行OWL项目的Docker容器"
|
86 |
-
echo "请运行以下命令构建Docker
|
87 |
|
88 |
if [[ "$OS_TYPE" == MINGW* ]] || [[ "$OS_TYPE" == CYGWIN* ]] || [[ "$OS_TYPE" == MSYS* ]]; then
|
89 |
echo "build_docker.bat"
|
90 |
else
|
91 |
echo "./build_docker.sh"
|
92 |
-
fi
|
|
|
1 |
#!/bin/bash
|
2 |
|
3 |
+
# 检测操作系统类型 | Detect operating system type
|
4 |
OS_TYPE=$(uname -s)
|
5 |
+
echo "检测到操作系统 | Detected OS: $OS_TYPE"
|
6 |
|
7 |
+
# 检查Docker是否安装 | Check if Docker is installed
|
8 |
if ! command -v docker &> /dev/null; then
|
9 |
+
echo "错误 | Error: Docker未安装 | Docker not installed"
|
10 |
|
11 |
if [[ "$OS_TYPE" == "Darwin" ]]; then
|
12 |
+
echo "在macOS上安装Docker的方法 | How to install Docker on macOS:"
|
13 |
+
echo "1. 访问 | Visit https://docs.docker.com/desktop/install/mac-install/ 下载Docker Desktop | to download Docker Desktop"
|
14 |
+
echo "2. 安装并启动Docker Desktop | Install and start Docker Desktop"
|
15 |
elif [[ "$OS_TYPE" == "Linux" ]]; then
|
16 |
+
echo "在Linux上安装Docker的方法 | How to install Docker on Linux:"
|
17 |
+
echo "1. 运行以下命令 | Run the following commands:"
|
18 |
echo " sudo apt-get update"
|
19 |
echo " sudo apt-get install docker.io docker-compose"
|
20 |
+
echo "2. 启动Docker服务 | Start Docker service:"
|
21 |
echo " sudo systemctl start docker"
|
22 |
echo " sudo systemctl enable docker"
|
23 |
elif [[ "$OS_TYPE" == MINGW* ]] || [[ "$OS_TYPE" == CYGWIN* ]] || [[ "$OS_TYPE" == MSYS* ]]; then
|
24 |
+
echo "在Windows上安装Docker的方法 | How to install Docker on Windows:"
|
25 |
+
echo "1. 访问 | Visit https://docs.docker.com/desktop/install/windows-install/ 下载Docker Desktop | to download Docker Desktop"
|
26 |
+
echo "2. 安装并启动Docker Desktop | Install and start Docker Desktop"
|
27 |
fi
|
28 |
|
29 |
exit 1
|
30 |
fi
|
31 |
|
32 |
+
echo "Docker已安装 | Docker is installed"
|
33 |
|
34 |
+
# 检查Docker Compose是否安装 | Check if Docker Compose is installed
|
35 |
if ! command -v docker-compose &> /dev/null; then
|
36 |
+
echo "错误 | Error: Docker Compose未安装 | Docker Compose not installed"
|
37 |
|
38 |
if [[ "$OS_TYPE" == "Darwin" ]]; then
|
39 |
+
echo "Docker Desktop for Mac已包含Docker Compose | Docker Desktop for Mac already includes Docker Compose"
|
40 |
elif [[ "$OS_TYPE" == "Linux" ]]; then
|
41 |
+
echo "在Linux上安装Docker Compose的方法 | How to install Docker Compose on Linux:"
|
42 |
+
echo "1. 运行以下命令 | Run the following command:"
|
43 |
echo " sudo apt-get install docker-compose"
|
44 |
elif [[ "$OS_TYPE" == MINGW* ]] || [[ "$OS_TYPE" == CYGWIN* ]] || [[ "$OS_TYPE" == MSYS* ]]; then
|
45 |
+
echo "Docker Desktop for Windows已包含Docker Compose | Docker Desktop for Windows already includes Docker Compose"
|
46 |
fi
|
47 |
|
48 |
exit 1
|
49 |
fi
|
50 |
|
51 |
+
echo "Docker Compose已安装 | Docker Compose is installed"
|
52 |
|
53 |
+
# 检查Docker是否正在运行 | Check if Docker is running
|
54 |
if ! docker info &> /dev/null; then
|
55 |
+
echo "错误 | Error: Docker未运行 | Docker not running"
|
56 |
|
57 |
if [[ "$OS_TYPE" == "Darwin" ]]; then
|
58 |
+
echo "请启动Docker Desktop应用程序 | Please start Docker Desktop application"
|
59 |
elif [[ "$OS_TYPE" == "Linux" ]]; then
|
60 |
+
echo "请运行以下命令启动Docker服务 | Please run the following command to start Docker service:"
|
61 |
echo "sudo systemctl start docker"
|
62 |
elif [[ "$OS_TYPE" == MINGW* ]] || [[ "$OS_TYPE" == CYGWIN* ]] || [[ "$OS_TYPE" == MSYS* ]]; then
|
63 |
+
echo "请启动Docker Desktop应用程序 | Please start Docker Desktop application"
|
64 |
fi
|
65 |
|
66 |
exit 1
|
67 |
fi
|
68 |
|
69 |
+
echo "Docker正在运行 | Docker is running"
|
70 |
|
71 |
+
# 检查是否有足够的磁盘空间 | Check if there is enough disk space
|
72 |
FREE_SPACE=$(df -h . | awk 'NR==2 {print $4}')
|
73 |
+
echo "可用磁盘空间 | Available disk space: $FREE_SPACE"
|
74 |
|
75 |
+
# 检查是否有.env文件 | Check if .env file exists
|
76 |
if [ ! -f "owl/.env" ]; then
|
77 |
+
echo "警告 | Warning: 未找到owl/.env文件 | owl/.env file not found"
|
78 |
+
echo "请运行以下命令创建环境变量文件 | Please run the following command to create environment variable file:"
|
79 |
echo "cp owl/.env_template owl/.env"
|
80 |
+
echo "然后编辑owl/.env文件,填写必要的API密钥 | Then edit owl/.env file and fill in necessary API keys"
|
81 |
else
|
82 |
+
echo "环境变量文件已存在 | Environment variable file exists"
|
83 |
fi
|
84 |
|
85 |
+
echo "所有检查完成,您的系统已准备好构建和运行OWL项目的Docker容器 | All checks completed, your system is ready to build and run OWL project Docker container"
|
86 |
+
echo "请运行以下命令构建Docker镜像 | Please run the following command to build Docker image:"
|
87 |
|
88 |
if [[ "$OS_TYPE" == MINGW* ]] || [[ "$OS_TYPE" == CYGWIN* ]] || [[ "$OS_TYPE" == MSYS* ]]; then
|
89 |
echo "build_docker.bat"
|
90 |
else
|
91 |
echo "./build_docker.sh"
|
92 |
+
fi
|
.container/docker-compose.yml
CHANGED
@@ -4,49 +4,49 @@ services:
|
|
4 |
context: ..
|
5 |
dockerfile: .container/Dockerfile
|
6 |
args:
|
7 |
-
# 构建参数
|
8 |
BUILDKIT_INLINE_CACHE: 1
|
9 |
-
# 使用BuildKit加速构建
|
10 |
cache_from:
|
11 |
- python:3.10-slim
|
12 |
volumes:
|
13 |
-
# 挂载.env文件,方便配置API密钥
|
14 |
- ./owl/.env:/app/owl/.env
|
15 |
-
# 可选:挂载数据目录
|
16 |
- ./data:/app/data
|
17 |
-
# 挂载缓存目录,避免重复下载
|
18 |
- playwright-cache:/root/.cache/ms-playwright
|
19 |
- pip-cache:/root/.pip/cache
|
20 |
environment:
|
21 |
-
# 可以在这里设置环境变量,覆盖.env文件中的设置
|
22 |
- OPENAI_API_KEY=${OPENAI_API_KEY}
|
23 |
-
# 添加显示相关的环境变量
|
24 |
- DISPLAY=:99
|
25 |
- PLAYWRIGHT_BROWSERS_PATH=/root/.cache/ms-playwright
|
26 |
-
# 设置Python不生成.pyc文件,减少磁盘IO
|
27 |
- PYTHONDONTWRITEBYTECODE=1
|
28 |
-
# 设置Python不缓冲输出,方便查看日志
|
29 |
- PYTHONUNBUFFERED=1
|
30 |
-
# 设置终端颜色
|
31 |
- TERM=xterm-256color
|
32 |
-
# 启用pip缓存
|
33 |
- PIP_CACHE_DIR=/root/.pip/cache
|
34 |
ports:
|
35 |
-
# 如果项目有Web界面,可以映射端口
|
36 |
- "8000:8000"
|
37 |
-
# 使用交互模式运行容器
|
38 |
stdin_open: true
|
39 |
tty: true
|
40 |
-
# 添加共享内存大小,提高浏览器性能
|
41 |
shm_size: 2gb
|
42 |
-
# 设置资源限制
|
43 |
deploy:
|
44 |
resources:
|
45 |
limits:
|
46 |
cpus: '2'
|
47 |
memory: 4G
|
48 |
|
49 |
-
# 定义持久化卷,用于缓存
|
50 |
volumes:
|
51 |
playwright-cache:
|
52 |
-
pip-cache:
|
|
|
4 |
context: ..
|
5 |
dockerfile: .container/Dockerfile
|
6 |
args:
|
7 |
+
# 构建参数 | Build arguments
|
8 |
BUILDKIT_INLINE_CACHE: 1
|
9 |
+
# 使用BuildKit加速构建 | Use BuildKit to accelerate build
|
10 |
cache_from:
|
11 |
- python:3.10-slim
|
12 |
volumes:
|
13 |
+
# 挂载.env文件,方便配置API密钥 | Mount .env file for easy API key configuration
|
14 |
- ./owl/.env:/app/owl/.env
|
15 |
+
# 可选:挂载数据目录 | Optional: Mount data directory
|
16 |
- ./data:/app/data
|
17 |
+
# 挂载缓存目录,避免重复下载 | Mount cache directories to avoid repeated downloads
|
18 |
- playwright-cache:/root/.cache/ms-playwright
|
19 |
- pip-cache:/root/.pip/cache
|
20 |
environment:
|
21 |
+
# 可以在这里设置环境变量,覆盖.env文件中的设置 | Set environment variables here to override settings in .env file
|
22 |
- OPENAI_API_KEY=${OPENAI_API_KEY}
|
23 |
+
# 添加显示相关的环境变量 | Add display-related environment variables
|
24 |
- DISPLAY=:99
|
25 |
- PLAYWRIGHT_BROWSERS_PATH=/root/.cache/ms-playwright
|
26 |
+
# 设置Python不生成.pyc文件,减少磁盘IO | Set Python to not generate .pyc files, reduce disk IO
|
27 |
- PYTHONDONTWRITEBYTECODE=1
|
28 |
+
# 设置Python不缓冲输出,方便查看日志 | Set Python to not buffer output for easier log viewing
|
29 |
- PYTHONUNBUFFERED=1
|
30 |
+
# 设置终端颜色 | Set terminal color
|
31 |
- TERM=xterm-256color
|
32 |
+
# 启用pip缓存 | Enable pip cache
|
33 |
- PIP_CACHE_DIR=/root/.pip/cache
|
34 |
ports:
|
35 |
+
# 如果项目有Web界面,可以映射端口 | If the project has a web interface, map ports
|
36 |
- "8000:8000"
|
37 |
+
# 使用交互模式运行容器 | Run container in interactive mode
|
38 |
stdin_open: true
|
39 |
tty: true
|
40 |
+
# 添加共享内存大小,提高浏览器性能 | Add shared memory size to improve browser performance
|
41 |
shm_size: 2gb
|
42 |
+
# 设置资源限制 | Set resource limits
|
43 |
deploy:
|
44 |
resources:
|
45 |
limits:
|
46 |
cpus: '2'
|
47 |
memory: 4G
|
48 |
|
49 |
+
# 定义持久化卷,用于缓存 | Define persistent volumes for caching
|
50 |
volumes:
|
51 |
playwright-cache:
|
52 |
+
pip-cache:
|
.container/run_in_docker.bat
CHANGED
@@ -1,71 +1,71 @@
|
|
1 |
@echo off
|
2 |
setlocal enabledelayedexpansion
|
3 |
|
4 |
-
REM 定义配置变量
|
5 |
set SERVICE_NAME=owl
|
6 |
set PYTHON_CMD=xvfb-python
|
7 |
set MAX_WAIT_SECONDS=60
|
8 |
set CHECK_INTERVAL_SECONDS=2
|
9 |
|
10 |
-
REM 检查参数
|
11 |
if "%~1"=="" (
|
12 |
-
echo
|
13 |
-
echo
|
14 |
-
echo
|
15 |
-
echo 如果不指定脚本名称,默认使用 run.py
|
16 |
exit /b 1
|
17 |
)
|
18 |
|
19 |
-
REM 判断第一个参数是否是脚本名称
|
20 |
set SCRIPT_NAME=%~1
|
21 |
set QUERY=%~2
|
22 |
|
23 |
if "!SCRIPT_NAME:~-3!"==".py" (
|
24 |
-
REM 如果提供了第二个参数,则为查询内容
|
25 |
if "!QUERY!"=="" (
|
26 |
-
echo
|
27 |
exit /b 1
|
28 |
)
|
29 |
) else (
|
30 |
-
REM 如果第一个参数不是脚本名称,则默认使用 run.py
|
31 |
set QUERY=!SCRIPT_NAME!
|
32 |
set SCRIPT_NAME=run.py
|
33 |
)
|
34 |
|
35 |
-
REM 检查脚本是否存在
|
36 |
if not exist "owl\!SCRIPT_NAME!" (
|
37 |
-
echo
|
38 |
-
echo
|
39 |
dir /b owl\*.py | findstr /v "__"
|
40 |
exit /b 1
|
41 |
)
|
42 |
|
43 |
-
echo
|
44 |
-
echo
|
45 |
|
46 |
-
REM 从docker-compose.yml获取服务名称(如果文件存在)
|
47 |
if exist ".container\docker-compose.yml" (
|
48 |
for /f "tokens=*" %%a in ('findstr /r "^ [a-zA-Z0-9_-]*:" .container\docker-compose.yml') do (
|
49 |
set line=%%a
|
50 |
set service=!line:~2,-1!
|
51 |
if not "!service!"=="" (
|
52 |
-
REM 使用第一个找到的服务名称
|
53 |
set SERVICE_NAME=!service!
|
54 |
-
echo 从docker-compose.yml
|
55 |
goto :found_service
|
56 |
)
|
57 |
)
|
58 |
)
|
59 |
:found_service
|
60 |
|
61 |
-
REM 确保Docker容器正在运行
|
62 |
docker-compose ps | findstr "!SERVICE_NAME!.*Up" > nul
|
63 |
if errorlevel 1 (
|
64 |
-
echo 启动Docker容器...
|
65 |
docker-compose up -d
|
66 |
|
67 |
-
REM 使用循环检查容器是否就绪
|
68 |
-
echo 等待容器启动...
|
69 |
set /a total_wait=0
|
70 |
|
71 |
:wait_loop
|
@@ -75,42 +75,42 @@ if errorlevel 1 (
|
|
75 |
docker-compose ps | findstr "!SERVICE_NAME!.*Up" > nul
|
76 |
if errorlevel 1 (
|
77 |
if !total_wait! LSS !MAX_WAIT_SECONDS! (
|
78 |
-
echo 容器尚未就绪,已等待!total_wait!秒,继续等待...
|
79 |
goto :wait_loop
|
80 |
) else (
|
81 |
-
echo
|
82 |
-
echo 请检查Docker
|
83 |
exit /b 1
|
84 |
)
|
85 |
) else (
|
86 |
-
echo
|
87 |
)
|
88 |
)
|
89 |
|
90 |
-
REM 检查容器中是否存在xvfb-python命令
|
91 |
-
echo 检查容器中的命令...
|
92 |
docker-compose exec -T !SERVICE_NAME! which !PYTHON_CMD! > nul 2>&1
|
93 |
if errorlevel 1 (
|
94 |
-
echo
|
95 |
set PYTHON_CMD=python
|
96 |
|
97 |
-
REM 检查python命令是否存在
|
98 |
docker-compose exec -T !SERVICE_NAME! which python > nul 2>&1
|
99 |
if errorlevel 1 (
|
100 |
-
echo
|
101 |
-
echo 请检查容器配置
|
102 |
exit /b 1
|
103 |
)
|
104 |
)
|
105 |
|
106 |
-
REM 在容器中运行指定的脚本,传递查询参数
|
107 |
-
echo 在Docker容器中使用!PYTHON_CMD!运行脚本...
|
108 |
docker-compose exec -T !SERVICE_NAME! !PYTHON_CMD! !SCRIPT_NAME! "!QUERY!"
|
109 |
|
110 |
if errorlevel 0 (
|
111 |
-
echo 查询完成!
|
112 |
) else (
|
113 |
-
echo 查询执行失败,请检查错误信息。
|
114 |
)
|
115 |
|
116 |
-
pause
|
|
|
1 |
@echo off
|
2 |
setlocal enabledelayedexpansion
|
3 |
|
4 |
+
REM 定义配置变量 | Define configuration variables
|
5 |
set SERVICE_NAME=owl
|
6 |
set PYTHON_CMD=xvfb-python
|
7 |
set MAX_WAIT_SECONDS=60
|
8 |
set CHECK_INTERVAL_SECONDS=2
|
9 |
|
10 |
+
REM 检查参数 | Check parameters
|
11 |
if "%~1"=="" (
|
12 |
+
echo 用法 | Usage: run_in_docker.bat [脚本名称 | script name] "你的问题 | your question"
|
13 |
+
echo 例如 | Example: run_in_docker.bat run.py "什么是人工智能? | What is artificial intelligence?"
|
14 |
+
echo 或者 | Or: run_in_docker.bat run_deepseek_example.py "什么是人工智能? | What is artificial intelligence?"
|
15 |
+
echo 如果不指定脚本名称,默认使用 run.py | If script name is not specified, run.py will be used by default
|
16 |
exit /b 1
|
17 |
)
|
18 |
|
19 |
+
REM 判断第一个参数是否是脚本名称 | Determine if the first parameter is a script name
|
20 |
set SCRIPT_NAME=%~1
|
21 |
set QUERY=%~2
|
22 |
|
23 |
if "!SCRIPT_NAME:~-3!"==".py" (
|
24 |
+
REM 如果提供了第二个参数,则为查询内容 | If a second parameter is provided, it's the query content
|
25 |
if "!QUERY!"=="" (
|
26 |
+
echo 请提供查询参数,例如 | Please provide query parameter, e.g.: run_in_docker.bat !SCRIPT_NAME! "你的问题 | your question"
|
27 |
exit /b 1
|
28 |
)
|
29 |
) else (
|
30 |
+
REM 如果第一个参数不是脚本名称,则默认使用 run.py | If the first parameter is not a script name, use run.py by default
|
31 |
set QUERY=!SCRIPT_NAME!
|
32 |
set SCRIPT_NAME=run.py
|
33 |
)
|
34 |
|
35 |
+
REM 检查脚本是否存在 | Check if the script exists
|
36 |
if not exist "owl\!SCRIPT_NAME!" (
|
37 |
+
echo 错误 | Error: 脚本 | Script 'owl\!SCRIPT_NAME!' 不存在 | does not exist
|
38 |
+
echo 可用的脚本有 | Available scripts:
|
39 |
dir /b owl\*.py | findstr /v "__"
|
40 |
exit /b 1
|
41 |
)
|
42 |
|
43 |
+
echo 使用脚本 | Using script: !SCRIPT_NAME!
|
44 |
+
echo 查询内容 | Query content: !QUERY!
|
45 |
|
46 |
+
REM 从docker-compose.yml获取服务名称(如果文件存在) | Get service name from docker-compose.yml (if file exists)
|
47 |
if exist ".container\docker-compose.yml" (
|
48 |
for /f "tokens=*" %%a in ('findstr /r "^ [a-zA-Z0-9_-]*:" .container\docker-compose.yml') do (
|
49 |
set line=%%a
|
50 |
set service=!line:~2,-1!
|
51 |
if not "!service!"=="" (
|
52 |
+
REM 使用第一个找到的服务名称 | Use the first service name found
|
53 |
set SERVICE_NAME=!service!
|
54 |
+
echo 从docker-compose.yml检测到服务名称 | Detected service name from docker-compose.yml: !SERVICE_NAME!
|
55 |
goto :found_service
|
56 |
)
|
57 |
)
|
58 |
)
|
59 |
:found_service
|
60 |
|
61 |
+
REM 确保Docker容器正在运行 | Ensure Docker container is running
|
62 |
docker-compose ps | findstr "!SERVICE_NAME!.*Up" > nul
|
63 |
if errorlevel 1 (
|
64 |
+
echo 启动Docker容器... | Starting Docker container...
|
65 |
docker-compose up -d
|
66 |
|
67 |
+
REM 使用循环检查容器是否就绪 | Use loop to check if container is ready
|
68 |
+
echo 等待容器启动... | Waiting for container to start...
|
69 |
set /a total_wait=0
|
70 |
|
71 |
:wait_loop
|
|
|
75 |
docker-compose ps | findstr "!SERVICE_NAME!.*Up" > nul
|
76 |
if errorlevel 1 (
|
77 |
if !total_wait! LSS !MAX_WAIT_SECONDS! (
|
78 |
+
echo 容器尚未就绪,已等待!total_wait!秒,继续等待... | Container not ready yet, waited for !total_wait! seconds, continuing to wait...
|
79 |
goto :wait_loop
|
80 |
) else (
|
81 |
+
echo 错误 | Error:容器启动超时,已等待!MAX_WAIT_SECONDS!秒 | Container startup timeout, waited for !MAX_WAIT_SECONDS! seconds
|
82 |
+
echo 请检查Docker容器状态 | Please check Docker container status:docker-compose ps
|
83 |
exit /b 1
|
84 |
)
|
85 |
) else (
|
86 |
+
echo 容���已就绪,共等待了!total_wait!秒 | Container is ready, waited for !total_wait! seconds in total
|
87 |
)
|
88 |
)
|
89 |
|
90 |
+
REM 检查容器中是否存在xvfb-python命令 | Check if xvfb-python command exists in container
|
91 |
+
echo 检查容器中的命令... | Checking commands in container...
|
92 |
docker-compose exec -T !SERVICE_NAME! which !PYTHON_CMD! > nul 2>&1
|
93 |
if errorlevel 1 (
|
94 |
+
echo 警告 | Warning:容器中未找到!PYTHON_CMD!命令,尝试使用python替代 | !PYTHON_CMD! command not found in container, trying to use python instead
|
95 |
set PYTHON_CMD=python
|
96 |
|
97 |
+
REM 检查python命令是否存在 | Check if python command exists
|
98 |
docker-compose exec -T !SERVICE_NAME! which python > nul 2>&1
|
99 |
if errorlevel 1 (
|
100 |
+
echo 错误 | Error:容器中未找到python命令 | python command not found in container
|
101 |
+
echo 请检查容器配置 | Please check container configuration
|
102 |
exit /b 1
|
103 |
)
|
104 |
)
|
105 |
|
106 |
+
REM 在容器中运行指定的脚本,传递查询参数 | Run the specified script in container, passing query parameter
|
107 |
+
echo 在Docker容器中使用!PYTHON_CMD!运行脚本... | Running script in Docker container using !PYTHON_CMD!...
|
108 |
docker-compose exec -T !SERVICE_NAME! !PYTHON_CMD! !SCRIPT_NAME! "!QUERY!"
|
109 |
|
110 |
if errorlevel 0 (
|
111 |
+
echo 查询完成! | Query completed!
|
112 |
) else (
|
113 |
+
echo 查询执行失败,请检查错误信息。 | Query execution failed, please check error messages.
|
114 |
)
|
115 |
|
116 |
+
pause
|
.container/run_in_docker.sh
CHANGED
@@ -1,44 +1,44 @@
|
|
1 |
#!/bin/bash
|
2 |
|
3 |
-
# 定义配置变量
|
4 |
SERVICE_NAME="owl"
|
5 |
PYTHON_CMD="xvfb-python"
|
6 |
MAX_WAIT_SECONDS=60
|
7 |
CHECK_INTERVAL_SECONDS=2
|
8 |
|
9 |
-
# 检测操作系统类型
|
10 |
OS_TYPE=$(uname -s)
|
11 |
-
echo "
|
12 |
|
13 |
-
# 检查是否提供了查询参数
|
14 |
if [ $# -lt 1 ]; then
|
15 |
-
echo "
|
16 |
-
echo "
|
17 |
-
echo "
|
18 |
-
echo "如果不指定脚本名称,默认使用 run.py"
|
19 |
exit 1
|
20 |
fi
|
21 |
|
22 |
-
# 判断第一个参数是否是脚本名称
|
23 |
if [[ $1 == *.py ]]; then
|
24 |
SCRIPT_NAME="$1"
|
25 |
-
# 如果提供了第二个参数,则为查询内容
|
26 |
if [ $# -ge 2 ]; then
|
27 |
QUERY="$2"
|
28 |
else
|
29 |
-
echo "
|
30 |
exit 1
|
31 |
fi
|
32 |
else
|
33 |
-
# 如果第一个参数不是脚本名称,则默认使用 run.py
|
34 |
SCRIPT_NAME="run.py"
|
35 |
QUERY="$1"
|
36 |
fi
|
37 |
|
38 |
-
# 检查脚本是否存在
|
39 |
if [ ! -f "owl/$SCRIPT_NAME" ]; then
|
40 |
-
echo "
|
41 |
-
echo "
|
42 |
if [[ "$OS_TYPE" == MINGW* ]] || [[ "$OS_TYPE" == CYGWIN* ]] || [[ "$OS_TYPE" == MSYS* ]]; then
|
43 |
find owl -name "*.py" | grep -v "__" | sed 's/\\/\//g'
|
44 |
else
|
@@ -47,36 +47,36 @@ if [ ! -f "owl/$SCRIPT_NAME" ]; then
|
|
47 |
exit 1
|
48 |
fi
|
49 |
|
50 |
-
echo "
|
51 |
-
echo "
|
52 |
|
53 |
-
# 从docker-compose.yml获取服务名称(如果文件存在)
|
54 |
if [ -f ".container/docker-compose.yml" ]; then
|
55 |
DETECTED_SERVICE=$(grep -E "^ [a-zA-Z0-9_-]*:" .container/docker-compose.yml | head -1 | sed 's/^ \(.*\):.*/\1/')
|
56 |
if [ ! -z "$DETECTED_SERVICE" ]; then
|
57 |
SERVICE_NAME="$DETECTED_SERVICE"
|
58 |
-
echo "从docker-compose.yml
|
59 |
fi
|
60 |
fi
|
61 |
|
62 |
-
# 检查Docker Compose命令
|
63 |
if command -v docker-compose &> /dev/null; then
|
64 |
COMPOSE_CMD="docker-compose"
|
65 |
elif docker compose version &> /dev/null; then
|
66 |
COMPOSE_CMD="docker compose"
|
67 |
else
|
68 |
-
echo "
|
69 |
exit 1
|
70 |
fi
|
71 |
|
72 |
-
# 确保Docker容器正在运行
|
73 |
CONTAINER_RUNNING=$($COMPOSE_CMD ps | grep -c "$SERVICE_NAME.*Up" || true)
|
74 |
if [ "$CONTAINER_RUNNING" -eq 0 ]; then
|
75 |
-
echo "启动Docker容器..."
|
76 |
$COMPOSE_CMD up -d
|
77 |
|
78 |
-
# 使用循环检查容器是否就绪
|
79 |
-
echo "等待容器启动..."
|
80 |
TOTAL_WAIT=0
|
81 |
|
82 |
while [ $TOTAL_WAIT -lt $MAX_WAIT_SECONDS ]; do
|
@@ -85,51 +85,51 @@ if [ "$CONTAINER_RUNNING" -eq 0 ]; then
|
|
85 |
|
86 |
CONTAINER_RUNNING=$($COMPOSE_CMD ps | grep -c "$SERVICE_NAME.*Up" || true)
|
87 |
if [ "$CONTAINER_RUNNING" -gt 0 ]; then
|
88 |
-
echo "容器已就绪,共等待了 $TOTAL_WAIT 秒"
|
89 |
break
|
90 |
else
|
91 |
-
echo "容器尚未就绪,已等待 $TOTAL_WAIT 秒,继续等待..."
|
92 |
fi
|
93 |
done
|
94 |
|
95 |
if [ "$CONTAINER_RUNNING" -eq 0 ]; then
|
96 |
-
echo "
|
97 |
-
echo "请检查Docker
|
98 |
exit 1
|
99 |
fi
|
100 |
fi
|
101 |
|
102 |
-
# 检查容器中是否存在指定的Python命令
|
103 |
-
echo "检查容器中的命令..."
|
104 |
if ! $COMPOSE_CMD exec -T $SERVICE_NAME which $PYTHON_CMD &> /dev/null; then
|
105 |
-
echo "
|
106 |
PYTHON_CMD="python"
|
107 |
|
108 |
-
# 检查python命令是否存在
|
109 |
if ! $COMPOSE_CMD exec -T $SERVICE_NAME which python &> /dev/null; then
|
110 |
-
echo "
|
111 |
-
echo "请检查容器配置"
|
112 |
exit 1
|
113 |
fi
|
114 |
fi
|
115 |
|
116 |
-
# 在容器中运行指定的脚本,传递查询参数
|
117 |
-
echo "在Docker容器中使用 $PYTHON_CMD 运行脚本..."
|
118 |
|
119 |
-
# 根据操作系统类型执行不同的命令
|
120 |
if [[ "$OS_TYPE" == MINGW* ]] || [[ "$OS_TYPE" == CYGWIN* ]] || [[ "$OS_TYPE" == MSYS* ]]; then
|
121 |
-
# Windows可能需要特殊处理引号
|
122 |
winpty $COMPOSE_CMD exec -T $SERVICE_NAME $PYTHON_CMD $SCRIPT_NAME "$QUERY"
|
123 |
RESULT=$?
|
124 |
else
|
125 |
-
# macOS 或 Linux
|
126 |
$COMPOSE_CMD exec -T $SERVICE_NAME $PYTHON_CMD $SCRIPT_NAME "$QUERY"
|
127 |
RESULT=$?
|
128 |
fi
|
129 |
|
130 |
-
# 检查命令执行结果
|
131 |
if [ $RESULT -eq 0 ]; then
|
132 |
-
echo "查询完成!"
|
133 |
else
|
134 |
-
echo "查询执行失败,请检查错误信息。"
|
135 |
-
fi
|
|
|
1 |
#!/bin/bash
|
2 |
|
3 |
+
# 定义配置变量 | Define configuration variables
|
4 |
SERVICE_NAME="owl"
|
5 |
PYTHON_CMD="xvfb-python"
|
6 |
MAX_WAIT_SECONDS=60
|
7 |
CHECK_INTERVAL_SECONDS=2
|
8 |
|
9 |
+
# 检测操作系统类型 | Detect operating system type
|
10 |
OS_TYPE=$(uname -s)
|
11 |
+
echo "检测到操作系统 | Detected operating system: $OS_TYPE"
|
12 |
|
13 |
+
# 检查是否提供了查询参数 | Check if query parameters are provided
|
14 |
if [ $# -lt 1 ]; then
|
15 |
+
echo "用法 | Usage: ./run_in_docker.sh [脚本名称 | script name] '你的问题 | your question'"
|
16 |
+
echo "例如 | Example: ./run_in_docker.sh run.py '什么是人工智能? | What is artificial intelligence?'"
|
17 |
+
echo "或者 | Or: ./run_in_docker.sh run_deepseek_example.py '什么是人工智能? | What is artificial intelligence?'"
|
18 |
+
echo "如果不指定脚本名称,默认使用 run.py | If script name is not specified, run.py will be used by default"
|
19 |
exit 1
|
20 |
fi
|
21 |
|
22 |
+
# 判断第一个参数是否是脚本名称 | Determine if the first parameter is a script name
|
23 |
if [[ $1 == *.py ]]; then
|
24 |
SCRIPT_NAME="$1"
|
25 |
+
# 如果提供了第二个参数,则为查询内容 | If a second parameter is provided, it's the query content
|
26 |
if [ $# -ge 2 ]; then
|
27 |
QUERY="$2"
|
28 |
else
|
29 |
+
echo "请提供查询参数,例如 | Please provide query parameter, e.g.: ./run_in_docker.sh $SCRIPT_NAME '你的问题 | your question'"
|
30 |
exit 1
|
31 |
fi
|
32 |
else
|
33 |
+
# 如果第一个参数不是脚本名称,则默认使用 run.py | If the first parameter is not a script name, use run.py by default
|
34 |
SCRIPT_NAME="run.py"
|
35 |
QUERY="$1"
|
36 |
fi
|
37 |
|
38 |
+
# 检查脚本是否存在 | Check if the script exists
|
39 |
if [ ! -f "owl/$SCRIPT_NAME" ]; then
|
40 |
+
echo "错误 | Error: 脚本 | Script 'owl/$SCRIPT_NAME' 不存在 | does not exist"
|
41 |
+
echo "可用的脚本有 | Available scripts:"
|
42 |
if [[ "$OS_TYPE" == MINGW* ]] || [[ "$OS_TYPE" == CYGWIN* ]] || [[ "$OS_TYPE" == MSYS* ]]; then
|
43 |
find owl -name "*.py" | grep -v "__" | sed 's/\\/\//g'
|
44 |
else
|
|
|
47 |
exit 1
|
48 |
fi
|
49 |
|
50 |
+
echo "使用脚本 | Using script: $SCRIPT_NAME"
|
51 |
+
echo "查询内容 | Query content: $QUERY"
|
52 |
|
53 |
+
# 从docker-compose.yml获取服务名称(如果文件存在) | Get service name from docker-compose.yml (if file exists)
|
54 |
if [ -f ".container/docker-compose.yml" ]; then
|
55 |
DETECTED_SERVICE=$(grep -E "^ [a-zA-Z0-9_-]*:" .container/docker-compose.yml | head -1 | sed 's/^ \(.*\):.*/\1/')
|
56 |
if [ ! -z "$DETECTED_SERVICE" ]; then
|
57 |
SERVICE_NAME="$DETECTED_SERVICE"
|
58 |
+
echo "从docker-compose.yml检测到服务名称 | Detected service name from docker-compose.yml: $SERVICE_NAME"
|
59 |
fi
|
60 |
fi
|
61 |
|
62 |
+
# 检查Docker Compose命令 | Check Docker Compose command
|
63 |
if command -v docker-compose &> /dev/null; then
|
64 |
COMPOSE_CMD="docker-compose"
|
65 |
elif docker compose version &> /dev/null; then
|
66 |
COMPOSE_CMD="docker compose"
|
67 |
else
|
68 |
+
echo "错误 | Error: 未找到Docker Compose命令 | Docker Compose command not found"
|
69 |
exit 1
|
70 |
fi
|
71 |
|
72 |
+
# 确保Docker容器正在运行 | Ensure Docker container is running
|
73 |
CONTAINER_RUNNING=$($COMPOSE_CMD ps | grep -c "$SERVICE_NAME.*Up" || true)
|
74 |
if [ "$CONTAINER_RUNNING" -eq 0 ]; then
|
75 |
+
echo "启动Docker容器... | Starting Docker container..."
|
76 |
$COMPOSE_CMD up -d
|
77 |
|
78 |
+
# 使用循环检查容器是否就绪 | Use loop to check if container is ready
|
79 |
+
echo "等待容器启动... | Waiting for container to start..."
|
80 |
TOTAL_WAIT=0
|
81 |
|
82 |
while [ $TOTAL_WAIT -lt $MAX_WAIT_SECONDS ]; do
|
|
|
85 |
|
86 |
CONTAINER_RUNNING=$($COMPOSE_CMD ps | grep -c "$SERVICE_NAME.*Up" || true)
|
87 |
if [ "$CONTAINER_RUNNING" -gt 0 ]; then
|
88 |
+
echo "容器已就绪,共等待了 $TOTAL_WAIT 秒 | Container is ready, waited for $TOTAL_WAIT seconds in total"
|
89 |
break
|
90 |
else
|
91 |
+
echo "容器尚未就绪,已等待 $TOTAL_WAIT 秒,继续等待... | Container not ready yet, waited for $TOTAL_WAIT seconds, continuing to wait..."
|
92 |
fi
|
93 |
done
|
94 |
|
95 |
if [ "$CONTAINER_RUNNING" -eq 0 ]; then
|
96 |
+
echo "错误 | Error:容器启动超时,已等待 $MAX_WAIT_SECONDS 秒 | Container startup timeout, waited for $MAX_WAIT_SECONDS seconds"
|
97 |
+
echo "请检查Docker容器状态 | Please check Docker container status:$COMPOSE_CMD ps"
|
98 |
exit 1
|
99 |
fi
|
100 |
fi
|
101 |
|
102 |
+
# 检查容器中是否存在指定的Python命令 | Check if specified Python command exists in container
|
103 |
+
echo "检查容器中的命令... | Checking commands in container..."
|
104 |
if ! $COMPOSE_CMD exec -T $SERVICE_NAME which $PYTHON_CMD &> /dev/null; then
|
105 |
+
echo "警告 | Warning:容器中未找到 $PYTHON_CMD 命令,尝试使用python替代 | $PYTHON_CMD command not found in container, trying to use python instead"
|
106 |
PYTHON_CMD="python"
|
107 |
|
108 |
+
# 检查python命令是否存在 | Check if python command exists
|
109 |
if ! $COMPOSE_CMD exec -T $SERVICE_NAME which python &> /dev/null; then
|
110 |
+
echo "错误 | Error:容器中未找到python命令 | python command not found in container"
|
111 |
+
echo "请检查容器配置 | Please check container configuration"
|
112 |
exit 1
|
113 |
fi
|
114 |
fi
|
115 |
|
116 |
+
# 在容器中运行指定的脚本,传递查询参数 | Run the specified script in container, passing query parameter
|
117 |
+
echo "在Docker容器中使用 $PYTHON_CMD 运行脚本... | Running script in Docker container using $PYTHON_CMD..."
|
118 |
|
119 |
+
# 根据操作系统类型执行不同的命令 | Execute different commands based on operating system type
|
120 |
if [[ "$OS_TYPE" == MINGW* ]] || [[ "$OS_TYPE" == CYGWIN* ]] || [[ "$OS_TYPE" == MSYS* ]]; then
|
121 |
+
# Windows可能需要特殊处理引号 | Windows may need special handling for quotes
|
122 |
winpty $COMPOSE_CMD exec -T $SERVICE_NAME $PYTHON_CMD $SCRIPT_NAME "$QUERY"
|
123 |
RESULT=$?
|
124 |
else
|
125 |
+
# macOS 或 Linux | macOS or Linux
|
126 |
$COMPOSE_CMD exec -T $SERVICE_NAME $PYTHON_CMD $SCRIPT_NAME "$QUERY"
|
127 |
RESULT=$?
|
128 |
fi
|
129 |
|
130 |
+
# 检查命令执行结果 | Check command execution result
|
131 |
if [ $RESULT -eq 0 ]; then
|
132 |
+
echo "查询完成! | Query completed!"
|
133 |
else
|
134 |
+
echo "查询执行失败,请检查错误信息。 | Query execution failed, please check error messages."
|
135 |
+
fi
|