|
|
|
ARG PYTHON_VERSION=3.10 |
|
ARG PIP_INDEX_URL=https://pypi.tuna.tsinghua.edu.cn/simple |
|
ARG PLAYWRIGHT_DOWNLOAD_HOST=https://npmmirror.com/mirrors/playwright |
|
|
|
|
|
FROM python:${PYTHON_VERSION}-slim AS builder |
|
|
|
|
|
WORKDIR /build |
|
|
|
|
|
ARG PIP_INDEX_URL |
|
RUN pip config set global.index-url ${PIP_INDEX_URL} |
|
|
|
|
|
RUN apt-get update && apt-get install -y --no-install-recommends \ |
|
build-essential \ |
|
&& apt-get clean \ |
|
&& rm -rf /var/lib/apt/lists/* |
|
|
|
|
|
COPY requirements.txt . |
|
RUN pip install --no-cache-dir --prefix=/install -r requirements.txt |
|
|
|
|
|
FROM python:${PYTHON_VERSION}-slim |
|
|
|
|
|
ARG BUILD_DATE |
|
ARG VERSION |
|
LABEL org.opencontainers.image.created="${BUILD_DATE}" \ |
|
org.opencontainers.image.version="${VERSION}" \ |
|
org.opencontainers.image.title="OWL Project" \ |
|
org.opencontainers.image.description="OWL Project Docker Image" \ |
|
org.opencontainers.image.source="https://github.com/yourusername/owl" |
|
|
|
|
|
WORKDIR /app |
|
|
|
|
|
ARG PIP_INDEX_URL |
|
RUN pip config set global.index-url ${PIP_INDEX_URL} |
|
|
|
|
|
COPY --from=builder /install /usr/local |
|
|
|
|
|
RUN apt-get update && apt-get install -y --no-install-recommends \ |
|
curl \ |
|
git \ |
|
ffmpeg \ |
|
libsm6 \ |
|
libxext6 \ |
|
|
|
xvfb \ |
|
xauth \ |
|
x11-utils \ |
|
&& apt-get clean \ |
|
&& rm -rf /var/lib/apt/lists/* |
|
|
|
|
|
ENV PLAYWRIGHT_BROWSERS_PATH=/root/.cache/ms-playwright |
|
ARG PLAYWRIGHT_DOWNLOAD_HOST |
|
ENV PLAYWRIGHT_DOWNLOAD_HOST=${PLAYWRIGHT_DOWNLOAD_HOST} |
|
RUN pip install --no-cache-dir playwright && \ |
|
playwright install --with-deps chromium |
|
|
|
|
|
RUN groupadd -r owl && useradd -r -g owl -m owl |
|
|
|
|
|
COPY owl/ ./owl/ |
|
COPY licenses/ ./licenses/ |
|
COPY assets/ ./assets/ |
|
COPY README.md . |
|
COPY README_zh.md . |
|
|
|
|
|
|
|
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 "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 && \ |
|
chmod +x /usr/local/bin/owl-welcome |
|
|
|
|
|
WORKDIR /app/owl |
|
|
|
|
|
RUN chown -R owl:owl /app |
|
RUN mkdir -p /root/.cache && chown -R owl:owl /root/.cache |
|
RUN chmod 644 /app/owl/.env |
|
|
|
|
|
USER owl |
|
|
|
|
|
|
|
|
|
|
|
HEALTHCHECK --interval=30s --timeout=10s --start-period=5s --retries=3 \ |
|
CMD python -c "import sys; sys.exit(0 if __import__('os').path.exists('/app/owl') else 1)" |
|
|
|
|
|
CMD ["/bin/bash", "-c", "owl-welcome && /bin/bash"] |