Files
DataClaw/dataclaw-api/Dockerfile
T
2026-05-13 16:43:53 +08:00

56 lines
2.2 KiB
Docker

# Backend Dockerfile (Context is root)
# 固定 Debian bookworm,避免 python:3.11-slim 随上游切到 trixie/testing 导致 apt 源 404
FROM python:3.11-slim-bookworm
WORKDIR /app
# 构建时若访问 deb.debian.org 不稳定:docker compose build --build-arg APT_CN_MIRROR=true
ARG APT_CN_MIRROR=false
# Install system dependencies(重试 + 超时;可选国内镜像)
RUN set -eux; \
printf 'Acquire::Retries "5";\nAcquire::http::Timeout "120";\nAcquire::https::Timeout "120";\n' \
> /etc/apt/apt.conf.d/99dataclaw; \
if [ "$APT_CN_MIRROR" = "true" ] || [ "$APT_CN_MIRROR" = "1" ] || [ "$APT_CN_MIRROR" = "yes" ]; then \
for f in /etc/apt/sources.list.d/*.sources /etc/apt/sources.list; do \
[ -f "$f" ] || continue; \
sed -i 's|http://deb.debian.org/debian|https://mirrors.tuna.tsinghua.edu.cn/debian|g' "$f"; \
sed -i 's|https://deb.debian.org/debian|https://mirrors.tuna.tsinghua.edu.cn/debian|g' "$f"; \
sed -i 's|http://security.debian.org/debian-security|https://mirrors.tuna.tsinghua.edu.cn/debian-security|g' "$f"; \
sed -i 's|https://security.debian.org/debian-security|https://mirrors.tuna.tsinghua.edu.cn/debian-security|g' "$f"; \
done; \
fi; \
i=1; \
while [ "$i" -le 8 ]; do \
apt-get update && \
DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \
build-essential curl libpq-dev && \
rm -rf /var/lib/apt/lists/* && exit 0; \
echo "apt attempt $i failed, retry in 25s..."; \
i=$((i+1)); sleep 25; \
done; \
exit 1
# Install uv
COPY --from=ghcr.io/astral-sh/uv:latest /uv /uvx /bin/
# Copy build-related files from dataclaw-api directory
COPY dataclaw-api/pyproject.toml dataclaw-api/uv.lock dataclaw-api/hatch_build.py dataclaw-api/README.md ./
# Install dependencies
RUN uv sync --frozen --no-dev
# Copy dataclaw-api source
COPY dataclaw-api/ .
# Copy the actual agent-core package from the nested directory
COPY agent-core/nanobot/ ./nanobot/
# Copy dataclaw-voice source
COPY dataclaw-voice/ ./whisper/
# Expose port
EXPOSE 8000
# Run the application with uvicorn
CMD ["uv", "run", "uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]