From da69819b568449130773d9abf815da105e6acb56 Mon Sep 17 00:00:00 2001 From: meijiali <你的邮箱@xxx.com> Date: Fri, 3 Jul 2026 21:14:49 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=20Docker=20=E9=A6=96?= =?UTF-8?q?=E9=A1=B5=E6=A8=A1=E6=9D=BF=E5=8A=A0=E8=BD=BD=E5=A4=B1=E8=B4=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Dockerfile | 5 ++--- requirements.txt | 8 ++++++++ tests/unit/test_deployment_config.py | 16 ++++++++++++++++ 3 files changed, 26 insertions(+), 3 deletions(-) create mode 100644 requirements.txt diff --git a/Dockerfile b/Dockerfile index 89aa3c1..41764b2 100644 --- a/Dockerfile +++ b/Dockerfile @@ -7,9 +7,8 @@ WORKDIR /app RUN adduser --disabled-password --gecos "" appuser -COPY pyproject.toml uv.lock ./ -RUN pip install --no-cache-dir uv \ - && uv pip install --system --no-cache . +COPY requirements.txt ./ +RUN pip install --no-cache-dir -r requirements.txt COPY app ./app COPY .env.example ./.env.example diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..8224502 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,8 @@ +beautifulsoup4>=4.12.3 +fastapi>=0.115.0 +httpx>=0.27.0 +jinja2>=3.1.4 +pydantic>=2.8.0 +pydantic-settings>=2.4.0 +sqlalchemy>=2.0.32 +uvicorn[standard]>=0.30.6 diff --git a/tests/unit/test_deployment_config.py b/tests/unit/test_deployment_config.py index 4bc4da6..b656f17 100644 --- a/tests/unit/test_deployment_config.py +++ b/tests/unit/test_deployment_config.py @@ -29,3 +29,19 @@ def test_real_env_file_is_gitignored(): gitignore_lines = (ROOT / ".gitignore").read_text(encoding="utf-8").splitlines() assert ".env" in gitignore_lines + + +def test_dockerfile_does_not_bootstrap_uv_from_runtime_pip(): + dockerfile_content = (ROOT / "Dockerfile").read_text(encoding="utf-8") + + assert "pip install --no-cache-dir uv" not in dockerfile_content + assert "uv pip install" not in dockerfile_content + + +def test_dockerfile_installs_project_without_build_isolation(): + dockerfile_content = (ROOT / "Dockerfile").read_text(encoding="utf-8") + + assert "COPY requirements.txt ./" in dockerfile_content + assert "pip install --no-cache-dir -r requirements.txt" in dockerfile_content + assert "pip install --no-cache-dir ." not in dockerfile_content + assert "pip install --no-cache-dir --no-build-isolation ." not in dockerfile_content