FROM python:3.11 AS build-venv
ARG DEBIAN_FRONTEND=noninteractive
ARG CTK_VERSION
# Prepare a non-root user for the final image
RUN groupadd -g 1001 svc && useradd -m -u 1001 -g svc svc
# Install build-time dependencies
RUN apt-get update && \
apt-get install -y --no-install-recommends curl ca-certificates build-essential gcc python3-dev python3-venv && \
rm -rf /var/lib/apt/lists/*
WORKDIR /home/svc
# Bring in project manifest for dependency resolution
COPY pyproject.toml pdm.lock /home/svc/
# Install PDM and prepare Python virtual environment for building from source
RUN curl -sSL https://raw.githubusercontent.com/pdm-project/pdm/main/install-pdm.py | python3.11 -
ENV PATH="/root/.local/bin:${PATH}"
RUN pdm self update && \
cd /home/svc && \
pdm venv create python3.11 && \
pdm use .venv && \
pdm update --no-editable --no-self --dev --frozen-lockfile -G extensions && \
chown --recursive svc:svc /home/svc/.venv
# Clean up build tools to reduce image size
RUN apt-get remove -y build-essential gcc python3-dev && \
apt-get autoremove -y && \
apt-get clean && rm -rf /var/lib/apt/lists/*
FROM python:3.11
ARG DEBIAN_FRONTEND=noninteractive
# Create the same non-root user in the final image
RUN groupadd -g 1001 svc && useradd -m -u 1001 -g svc svc
COPY --from=build-venv /home/svc/.venv /home/svc/.venv
WORKDIR /home/svc
USER 1001
ENV PATH="/home/svc/.venv/bin:${PATH}"
ENTRYPOINT ["chaos"]
CMD ["--help"]
**/.git **/__pycache__ **/*.pyc build/ dist/ *.egg-info/ .env .venv README.md tests/ chaostoolkit/__pycache__
Concerns: No COPY of the actual project source code into the build stage; only pyproject.toml and pdm.lock are copied. The final image may not contain the CLI package itself unless it's installed as a PyPI dependency, so it may not actually build/run the intended tool from source., UNUSED ARG CTK_VERSION in the build stage; this arg is defined but never used, which is suspicious and could indicate leftover/template code., ENTRYPOINT relies on a console script named chaos being installed in the generated venv. If the package isn't installed as a dependency (or if the project isn’t copied and installed), chaos may not exist in PATH., If the goal is to build from source, the Dockerfile should copy the project files (e.g., COPY . /home/svc) and install the package (e.g., pdm install or pip install -e .) into the venv, rather than only resolving dependencies., Potential improvement: consider validating that the resulting image actually contains the chaos executable (e.g., test -x /home/svc/.venv/bin/chaos) as part of smoke tests.
FROM python:3.11 AS build-venv
ARG DEBIAN_FRONTEND=noninteractive
# Prepare a non-root user for the final image
RUN groupadd -g 1001 svc && useradd -m -u 1001 -g svc svc
# Install build-time dependencies
RUN apt-get update && \
apt-get install -y --no-install-recommends curl ca-certificates build-essential gcc python3-dev python3-venv && \
rm -rf /var/lib/apt/lists/*
WORKDIR /home/svc
# Bring in project manifest for dependency resolution
COPY pyproject.toml pdm.lock /home/svc/
# Copy the entire repository so we can build from source
COPY . /home/svc/
# Install PDM and prepare Python virtual environment for building from source
RUN curl -sSL https://raw.githubusercontent.com/pdm-project/pdm/main/install-pdm.py | python3.11 -
ENV PATH="/root/.local/bin:${PATH}"
RUN pdm self update && \
cd /home/svc && \
pdm venv create python3.11 && \
pdm use .venv && \
pdm update --no-editable --no-self --dev --frozen-lockfile -G extensions && \
/home/svc/.venv/bin/pip install -e . && \
chown --recursive svc:svc /home/svc/.venv
# Clean up build tools to reduce image size
RUN apt-get remove -y build-essential gcc python3-dev && \
apt-get autoremove -y && \
apt-get clean && rm -rf /var/lib/apt/lists/*
FROM python:3.11
ARG DEBIAN_FRONTEND=noninteractive
# Create the same non-root user in the final image
RUN groupadd -g 1001 svc && useradd -m -u 1001 -g svc svc
COPY --from=build-venv /home/svc/.venv /home/svc/.venv
WORKDIR /home/svc
USER 1001
ENV PATH="/home/svc/.venv/bin:${PATH}"
ENTRYPOINT ["chaos"]
CMD ["--help"]
Exact error and exit code - Error: /bin/sh: 1: /home/svc/.venv/bin/pip: not found - Exit code: 127 Failing command/step - Step: [build-venv 8/9] RUN pdm self update && cd /home/svc && pdm venv create python3.11 && pdm use .venv && pdm update --no-editable --no-self --dev --frozen-lockfile -G extensions && /home/svc/.venv/bin/pip install -e . && chown --recursive svc:svc /home/svc/.venv Missing packages or files mentioned - Missing file: /home/svc/.venv/bin/pip (pip binary not found in the created virtual environment) Version/compatibility notes - Python interpreter in venv: /home/svc/.venv/bin/python3.11 (Python 3.11) - PDM version installed during the process: PDM (2.26.6) - Notable version-mismatch warnings during dependency resolution (these are per-package warnings and were not repeated in full): - pytest versions skipped due to requires-python constraints (e.g., requires Python>=3.10, lock targets Python>=3.8) - Other per-package warnings about Python version compatibility (e.g., various pytest/pytest-cov, click, importlib-metadata, zipp, etc.) - Despite earlier steps showing many packages being resolved/installed, the final command failed due to the missing venv pip binary.
FROM python:3.11 AS build-venv
ARG DEBIAN_FRONTEND=noninteractive
# Prepare a non-root user for the final image
RUN groupadd -g 1001 svc && useradd -m -u 1001 -g svc svc
# Install build-time dependencies
RUN apt-get update && \
apt-get install -y --no-install-recommends curl ca-certificates build-essential gcc python3-dev python3-venv && \
rm -rf /var/lib/apt/lists/*
WORKDIR /home/svc
# Bring in project manifest for dependency resolution
COPY pyproject.toml pdm.lock /home/svc/
# Copy the entire repository so we can build from source
COPY . /home/svc/
# Install PDM and prepare Python virtual environment for building from source
RUN curl -sSL https://raw.githubusercontent.com/pdm-project/pdm/main/install-pdm.py | python3.11 -
ENV PATH="/root/.local/bin:${PATH}"
RUN pdm self update && \
cd /home/svc && \
pdm venv create python3.11 && \
pdm use .venv && \
pdm update --no-editable --no-self --dev --frozen-lockfile -G extensions && \
/home/svc/.venv/bin/python -m pip install -e . && \
chown --recursive svc:svc /home/svc/.venv
# Clean up build tools to reduce image size
RUN apt-get remove -y build-essential gcc python3-dev && \
apt-get autoremove -y && \
apt-get clean && rm -rf /var/lib/apt/lists/*
FROM python:3.11
ARG DEBIAN_FRONTEND=noninteractive
# Create the same non-root user in the final image
RUN groupadd -g 1001 svc && useradd -m -u 1001 -g svc svc
COPY --from=build-venv /home/svc/.venv /home/svc/.venv
WORKDIR /home/svc
USER 1001
ENV PATH="/home/svc/.venv/bin:${PATH}"
ENTRYPOINT ["chaos"]
CMD ["--help"]
- Exact error message and exit code
- /home/svc/.venv/bin/python: No module named pip
- Exit code: 1
- Failing command/step
- Step: [build-venv 8/9] RUN pdm self update && cd /home/svc && pdm venv create python3.11 && pdm use .venv && pdm update --no-editable --no-self --dev --frozen-lockfile -G extensions && /home/svc/.venv/bin/python -m pip install -e . && chown --recursive svc:svc /home/svc/.venv
- Failing subcommand: /home/svc/.venv/bin/python -m pip install -e . (exited with code 1)
- Missing packages or files mentioned
- Indicates missing pip module in the created virtual environment: “No module named pip” (pip not available in /home/svc/.venv/bin/python)
- Version mismatch / compatibility notes
- Python interpreter in venv: /home/svc/.venv/bin/python3.11 (Python 3.11)
- Warnings about Python version compatibility with lockfile packages (may be forced by Python 3.11):
- Skipping click@8.3.1 because it requires Python>=3.10 but the lock targets Python>=3.8
- Skipping click@8.3.0, click@8.2.1, click@8.2.0 for similar Python compatibility
- Skipping importlib-metadata@8.7.1, 8.7.0, 8.6.1, 8.6.0 (requires Python>=3.9) despite lock targets Python>=3.8
- Note: The venv creation and package resolution proceed, but these Python-version mismatches are present in the log.FROM python:3.11 AS build-venv
ARG DEBIAN_FRONTEND=noninteractive
# Prepare a non-root user for the final image
RUN groupadd -g 1001 svc && useradd -m -u 1001 -g svc svc
# Install build-time dependencies
RUN apt-get update && \
apt-get install -y --no-install-recommends curl ca-certificates build-essential gcc python3-dev python3-venv && \
rm -rf /var/lib/apt/lists/*
WORKDIR /home/svc
# Bring in project manifest for dependency resolution
COPY pyproject.toml pdm.lock /home/svc/
# Copy the entire repository so we can build from source
COPY . /home/svc/
# Install PDM and prepare Python virtual environment for building from source
RUN curl -sSL https://raw.githubusercontent.com/pdm-project/pdm/main/install-pdm.py | python3.11 -
ENV PATH="/root/.local/bin:${PATH}"
RUN pdm self update && \
cd /home/svc && \
pdm venv create python3.11 && \
pdm use .venv && \
pdm update --no-editable --no-self --dev --frozen-lockfile -G extensions && \
/home/svc/.venv/bin/python -m ensurepip --upgrade && \
/home/svc/.venv/bin/python -m pip install -U pip setuptools wheel && \
/home/svc/.venv/bin/pip install -e . && \
chown -R --recursive svc:svc /home/svc/.venv
# Clean up build tools to reduce image size
RUN apt-get remove -y build-essential gcc python3-dev && \
apt-get autoremove -y && \
apt-get clean && rm -rf /var/lib/apt/lists/*
FROM python:3.11
ARG DEBIAN_FRONTEND=noninteractive
# Create the same non-root user in the final image
RUN groupadd -g 1001 svc && useradd -m -u 1001 -g svc svc
COPY --from=build-venv /home/svc/.venv /home/svc/.venv
WORKDIR /home/svc
USER 1001
ENV PATH="/home/svc/.venv/bin:${PATH}"
ENTRYPOINT ["chaos"]
CMD ["--help"]
Concerns: Final image only copies the virtual environment from the build stage; the editable install (-e .) relies on the source tree existing at runtime, but the build artifacts (source code) are not copied into the final image. This can lead to a broken import since egg-link points to /home/svc/... inside the container which won't exist., No COPY of the source repository into the final image means installed package in site-packages via editable install will not have a valid path to the source code., Consider installing a non-editable package (pip install .) or copy the source code into the final image to satisfy editable references.
FROM python:3.11 AS build-venv
ARG DEBIAN_FRONTEND=noninteractive
# Prepare a non-root user for the final image
RUN groupadd -g 1001 svc && useradd -m -u 1001 -g svc svc
# Install build-time dependencies
RUN apt-get update && \
apt-get install -y --no-install-recommends curl ca-certificates build-essential gcc python3-dev python3-venv && \
rm -rf /var/lib/apt/lists/*
WORKDIR /home/svc
# Copy the repository so we can install from source
COPY . /home/svc/
# Install PDM and prepare Python virtual environment for building from source
RUN curl -sSL https://raw.githubusercontent.com/pdm-project/pdm/main/install-pdm.py | python3.11 -
ENV PATH="/root/.local/bin:${PATH}"
RUN pdm self update && \
cd /home/svc && \
pdm venv create python3.11 && \
pdm use .venv && \
pdm update --no-editable --no-self --dev --frozen-lockfile -G extensions && \
/home/svc/.venv/bin/python -m ensurepip --upgrade && \
/home/svc/.venv/bin/python -m pip install -U pip setuptools wheel && \
/home/svc/.venv/bin/pip install -e . && \
chown -R --recursive svc:svc /home/svc/.venv
# Clean up build tools to reduce image size
RUN apt-get remove -y build-essential gcc python3-dev && \
apt-get autoremove -y && \
apt-get clean && rm -rf /var/lib/apt/lists/*
FROM python:3.11
ARG DEBIAN_FRONTEND=noninteractive
# Create the same non-root user in the final image
RUN groupadd -g 1001 svc && useradd -m -u 1001 -g svc svc
COPY --from=build-venv /home/svc/.venv /home/svc/.venv
COPY --from=build-venv /home/svc/. /home/svc/
WORKDIR /home/svc
USER 1001
ENV PATH="/home/svc/.venv/bin:${PATH}"
ENTRYPOINT ["chaos"]
CMD ["--help"]
- Exact error message and exit code
- pdm.backend.exceptions.ValidationError: project.readme.file: Readme file not found ('README.md')
- Exit code: 1
- Note: “ERROR: Failed to build 'file:///home/svc' when getting requirements to build editable” also appears, indicating failure during editable install step
- Failing command/step
- [build-venv 7/8] RUN pdm self update && cd /home/svc && pdm venv create python3.11 && pdm use .venv && pdm update --no-editable --no-self --dev --frozen-lockfile -G extensions && /home/svc/.venv/bin/python -m ensurepip --upgrade && /home/svc/.venv/bin/python -m pip install -U pip setuptools wheel && /home/svc/.venv/bin/pip install -e . && chown -R --recursive svc:svc /home/svc/.venv
- Missing packages or files mentioned
- Readme file missing: README.md (causing the pdm configuration/validation error)
- Version mismatch information (notable warnings)
- Multiple PackageWarning messages indicating Python version compatibility mismatches during dependency resolution, e.g.:
- pytest versions require Python >= 3.10, but lock targets Python >= 3.8
- click versions require Python >= 3.10
- importlib-metadata versions require Python >= 3.9, while lock targets to Python >= 3.8
- These are warnings during resolution and not the direct cause of the failure, but reflect potential Python version constraints in the environment and lockfile.FROM python:3.11 AS build-venv
ARG DEBIAN_FRONTEND=noninteractive
# Prepare a non-root user for the final image
RUN groupadd -g 1001 svc && useradd -m -u 1001 -g svc svc
# Install build-time dependencies
RUN apt-get update && \
apt-get install -y --no-install-recommends curl ca-certificates build-essential gcc python3-dev python3-venv && \
rm -rf /var/lib/apt/lists/*
WORKDIR /home/svc
# Copy the repository so we can install from source
COPY . /home/svc/
# Install PDM and prepare Python virtual environment for building from source
RUN curl -sSL https://raw.githubusercontent.com/pdm-project/pdm/main/install-pdm.py | python3.11 -
ENV PATH="/root/.local/bin:${PATH}"
RUN pdm self update && \
cd /home/svc && \
pdm venv create python3.11 && \
pdm use .venv && \
pdm update --no-editable --no-self --dev --frozen-lockfile -G extensions && \
/home/svc/.venv/bin/python -m ensurepip --upgrade && \
/home/svc/.venv/bin/python -m pip install -U pip setuptools wheel && \
/home/svc/.venv/bin/pip install . && \
chown -R --recursive svc:svc /home/svc/.venv
# Clean up build tools to reduce image size
RUN apt-get remove -y build-essential gcc python3-dev && \
apt-get autoremove -y && \
apt-get clean && rm -rf /var/lib/apt/lists/*
FROM python:3.11
ARG DEBIAN_FRONTEND=noninteractive
# Create the same non-root user in the final image
RUN groupadd -g 1001 svc && useradd -m -u 1001 -g svc svc
COPY --from=build-venv /home/svc/.venv /home/svc/.venv
WORKDIR /home/svc
USER 1001
ENV PATH="/home/svc/.venv/bin:${PATH}"
ENTRYPOINT ["chaos"]
CMD ["--help"]
Summary (under 1500 chars):
- Failing step: [build-venv 7/8] RUN pdm self update && cd /home/svc && pdm venv create python3.11 && pdm use .venv && pdm update --no-editable --no-self --dev --frozen-lockfile -G extensions && /home/svc/.venv/bin/python -m ensurepip --upgrade && /home/svc/.venv/bin/python -m pip install -U pip setuptools wheel && /home/svc/.venv/bin/pip install . && chown -R --recursive svc:svc /home/svc/.venv
- Exact error messages and exit code:
- "pdm.backend.exceptions.ValidationError: project.readme.file: Readme file not found ('README.md')"
- "ERROR: Failed to build 'file:///home/svc' when getting requirements to build wheel"
- Exit code: 1
- Missing packages/files mentioned:
- README.md is missing (Readme file not found)
- Version mismatch / compatibility notes:
- Python interpreter in use: /home/svc/.venv/bin/python3.11 (Python 3.11)
- Several package warnings about requires-python mismatches (e.g., click versions skipped because they require Python >= 3.10 while lock targets Python >= 3.8)
- Other context: PDm installed and used (PDM 2.26.6), with deprecation notices like cross_platform strategy in use.**/.git **/__pycache__ **/*.pyc build/ dist/ *.egg-info/ .env .venv tests/ chaostoolkit/__pycache__
Status: build_failed Concerns - Packaging must define a console script named 'chaos'; otherwise the final image will not run. - Copying the entire built virtual environment from build to final stage may enlarge the image and cause permission edge cases if file ownership isn’t preserved. Failing step (exact command) RUN pdm self update && cd /home/svc && pdm venv create python3.11 && pdm use .venv && pdm update --no-editable --no-self --dev --frozen-lockfile -G extensions && /home/svc/.venv/bin/python -m ensurepip --upgrade && /home/svc/.venv/bin/python -m pip install -U pip setuptools wheel && /home/svc/.venv/bin/pip install . && chown -R --recursive svc:svc /home/svc/.venv Exact error message and exit code - error: metadata-generation-failed - Exit code: 1 Key failure text pdm.backend.exceptions.ConfigError: Cannot find the version from SCM or SCM isn't detected. You can still specify the version via environment variable `PDM_BUILD_SCM_VERSION`, or specify `fallback_version` config. Note: This error originates from a subprocess, and is likely not a problem with pip. Why it failed The local package at /home/svc could not have its version determined from SCM during metadata generation, causing the build of the package metadata to fail. Missing packages or files mentioned - None explicitly missing. The failure is due to SCM-version-detection for the local package (from file:///home/svc), not a missing file. Version/compatibility notes observed - Python interpreter used: /home/svc/.venv/bin/python3.11 (Python 3.11) - The build targets Python>=3.8; several per-package warnings about requires-python vs lock targets (e.g., click/pytest) rather than a hard error. - Also saw warnings about “Using the first matched interpreter” and deprecation/compatibility notices around pdm; root cause remains SCM version resolution. Recommended next steps (actionable) - Set environment variable PDM_BUILD_SCM_VERSION or configure a fallback_version to allow metadata generation without SCM. - Ensure the local package at /home/svc has a detectable SCM version (e.g., in a git repo with tags) or provide an explicit version in config.
FROM python:3.11 AS build-venv
ARG DEBIAN_FRONTEND=noninteractive
# Prepare a non-root user for the final image
RUN groupadd -g 1001 svc && useradd -m -u 1001 -g svc svc
# Install build-time dependencies
RUN apt-get update && \
apt-get install -y --no-install-recommends curl ca-certificates build-essential gcc python3-dev python3-venv && \
rm -rf /var/lib/apt/lists/*
WORKDIR /home/svc
# Copy the repository so we can install from source
COPY . /home/svc/
# Install PDM and prepare Python virtual environment for building from source
RUN curl -sSL https://raw.githubusercontent.com/pdm-project/pdm/main/install-pdm.py | python3.11 -
ENV PATH="/root/.local/bin:${PATH}"
ENV PDM_BUILD_SCM_VERSION=0.0.0
RUN pdm self update && \
cd /home/svc && \
pdm venv create python3.11 && \
pdm use .venv && \
pdm update --no-editable --no-self --dev --frozen-lockfile -G extensions && \
/home/svc/.venv/bin/python -m ensurepip --upgrade && \
/home/svc/.venv/bin/python -m pip install -U pip setuptools wheel && \
/home/svc/.venv/bin/pip install -e . && \
chown -R --recursive svc:svc /home/svc/.venv
# Clean up build tools to reduce image size
RUN apt-get remove -y build-essential gcc python3-dev && \
apt-get autoremove -y && \
apt-get clean && rm -rf /var/lib/apt/lists/*
FROM python:3.11
ARG DEBIAN_FRONTEND=noninteractive
# Create the same non-root user in the final image
RUN groupadd -g 1001 svc && useradd -m -u 1001 -g svc svc
COPY --from=build-venv /home/svc/.venv /home/svc/.venv
WORKDIR /home/svc
USER 1001
ENV PATH="/home/svc/.venv/bin:${PATH}"
ENTRYPOINT ["chaos"]
CMD ["--help"]
Concerns: Relies on a console script named 'chaos' installed by the package; ensure the project's setup defines an entry point 'chaos'., No .dockerignore is shown; could copy large or unnecessary files during build., COPY . /home/svc/ copies the entire repo; consider restricting to needed files. Smoke [FAIL]: test -x "$(command -v chaos) Output: sh: 1: Syntax error: Unterminated quoted string Smoke [FAIL]: chaos --help >/dev/null 2>&1 Output: Smoke [PASS]: chaos --help | head -n 1 >/dev/null 2>&1
FROM python:3.11 AS build-venv
ARG DEBIAN_FRONTEND=noninteractive
# Prepare a non-root user for the final image
RUN groupadd -g 1001 svc && useradd -m -u 1001 -g svc svc
# Install build-time dependencies
RUN apt-get update && \
apt-get install -y --no-install-recommends curl ca-certificates build-essential gcc python3-dev python3-venv && \
rm -rf /var/lib/apt/lists/*
WORKDIR /home/svc
# Copy the repository so we can install from source
COPY . /home/svc/
# Ensure we have an up-to-date pip tooling in the new venv and install the project
RUN python -m pip install --upgrade pip setuptools wheel && \
python -m pip install -e .
# Move the venv to a known location for the final image
# The build tooling creates the venv in /home/svc/.venv when using -m venv;
# since we used editable install, we rely on the system venv from the container's python.
# Note: We will still copy the project into the final image by copying the venv contents only.
# We'll create the venv path if necessary and set ownership accordingly in final image.
FROM python:3.11
ARG DEBIAN_FRONTEND=noninteractive
# Create the same non-root user in the final image
RUN groupadd -g 1001 svc && useradd -m -u 1001 -g svc svc
# Copy the built venv from the build stage
COPY --from=build-venv /home/svc/.venv /home/svc/.venv
WORKDIR /home/svc
USER 1001
ENV PATH="/home/svc/.venv/bin:${PATH}"
ENTRYPOINT ["chaos"]
CMD ["--help"]
Concerns: The build stage never creates /home/svc/.venv, yet the final stage copies /home/svc/.venv from the build stage. This means the venv likely does not exist in the final image, causing the CLI to be unavailable., The project is installed with 'pip install -e .' in the host/system Python environment rather than into a dedicated virtualenv. Relying on a non-existent venv in the final image is inconsistent and will fail once copied., ENTRYPOINT/PATH depend on the chaos CLI being installed in the venv (chaos in PATH), but there is no guarantee the venv was created and populated correctly. This is a fragile and misleading approach.
FROM python:3.11 AS build-venv
ARG DEBIAN_FRONTEND=noninteractive
# Prepare a non-root user for the final image
RUN groupadd -g 1001 svc && useradd -m -u 1001 -g svc svc
# Install build-time dependencies
RUN apt-get update && \
apt-get install -y --no-install-recommends curl ca-certificates build-essential gcc python3-dev python3-venv && \
rm -rf /var/lib/apt/lists/*
WORKDIR /home/svc
# Copy project manifest and repository for building from source
COPY pyproject.toml pdm.lock README.md /home/svc/
COPY . /home/svc/
# Install PDM and prepare Python virtual environment for building from source
RUN curl -sSL https://raw.githubusercontent.com/pdm-project/pdm/main/install-pdm.py | python3.11 -
ENV PATH="/root/.local/bin:${PATH}"
RUN pdm self update && \
cd /home/svc && \
pdm venv create python3.11 && \
pdm use .venv && \
pdm update --no-editable --no-self --dev --frozen-lockfile -G extensions && \
/home/svc/.venv/bin/python -m ensurepip --upgrade && \
/home/svc/.venv/bin/python -m pip install -U pip setuptools wheel && \
/home/svc/.venv/bin/pip install -e . && \
chown -R --recursive svc:svc /home/svc/.venv
FROM python:3.11
ARG DEBIAN_FRONTEND=noninteractive
# Create the same non-root user in the final image
RUN groupadd -g 1001 svc && useradd -m -u 1001 -g svc svc
COPY --from=build-venv /home/svc/.venv /home/svc/.venv
WORKDIR /home/svc
USER 1001
ENV PATH="/home/svc/.venv/bin:${PATH}"
ENTRYPOINT ["chaos"]
CMD ["--help"]
Summary:
- Failing step (exact):
[build-venv 8/8] RUN pdm self update && cd /home/svc && pdm venv create python3.11 && pdm use .venv && pdm update --no-editable --no-self --dev --frozen-lockfile -G extensions && /home/svc/.venv/bin/python -m ensurepip --upgrade && /home/svc/.venv/bin/python -m pip install -U pip setuptools wheel && /home/svc/.venv/bin/pip install -e . && chown -R --recursive svc:svc /home/svc/.venv
- Exact error message and exit code:
- error: metadata-generation-failed
- × Preparing editable metadata (pyproject.toml) did not run successfully.
- Exit code: 1
- Underlying cause:
pdm.backend.exceptions.ConfigError: Cannot find the version from SCM or SCM isn't detected.
You can still specify the version via environment variable `PDM_BUILD_SCM_VERSION`, or specify `fallback_version` config.
[end of output]
- Note: This error originates from a subprocess during editable metadata generation for the package from /home/svc.
- Missing packages or files mentioned:
- Not a missing package/file per se; the failure is due to inability to determine the project version from SCM (Source Control Management). The build tries to install the current project in editable mode, but SCM version information is unavailable.
- Version mismatch / related context:
- PDM version used: Installing/using PDM 2.26.6 (shown: “Successfully installed: PDM (2.26.6)”).
- Python environment: Virtualenv created at /home/svc/.venv using Python 3.11.
- Various per-package Python-version constraints appear as warnings (e.g., pytest-related packages require Python >= 3.10; click versions require Python >= 3.10), indicating lockfile/package constraints not fully aligned with Python 3.11, though these are warnings and did not halt earlier steps.
- A deprecated: cross_platform strategy warning appears, but the critical blocker is the SCM-based version resolution.FROM python:3.11 AS build-venv
ARG DEBIAN_FRONTEND=noninteractive
# Prepare a non-root user for the final image
RUN groupadd -g 1001 svc && useradd -m -u 1001 -g svc svc
# Install build-time dependencies
RUN apt-get update && \
apt-get install -y --no-install-recommends curl ca-certificates build-essential gcc python3-dev python3-venv && \
rm -rf /var/lib/apt/lists/*
WORKDIR /home/svc
# Copy project manifest and repository for building from source
COPY pyproject.toml pdm.lock README.md /home/svc/
COPY . /home/svc/
# Install PDM and prepare Python virtual environment for building from source
RUN curl -sSL https://raw.githubusercontent.com/pdm-project/pdm/main/install-pdm.py | python3.11 -
ENV PATH="/root/.local/bin:${PATH}"
ENV PDM_BUILD_SCM_VERSION=0.0.0
RUN pdm self update && \
cd /home/svc && \
pdm venv create python3.11 && \
pdm use .venv && \
pdm update --no-editable --no-self --dev --frozen-lockfile -G extensions && \
/home/svc/.venv/bin/python -m ensurepip --upgrade && \
/home/svc/.venv/bin/python -m pip install -U pip setuptools wheel && \
/home/svc/.venv/bin/pip install . && \
chown -R --recursive svc:svc /home/svc/.venv
# Clean up build tools to reduce image size
RUN apt-get remove -y build-essential gcc python3-dev && \
apt-get autoremove -y && \
apt-get clean && rm -rf /var/lib/apt/lists/*
FROM python:3.11
ARG DEBIAN_FRONTEND=noninteractive
# Create the same non-root user in the final image
RUN groupadd -g 1001 svc && useradd -m -u 1001 -g svc svc
# Copy the built venv from the build stage
COPY --from=build-venv /home/svc/.venv /home/svc/.venv
WORKDIR /home/svc
USER 1001
ENV PATH="/home/svc/.venv/bin:${PATH}"
ENTRYPOINT ["chaos"]
CMD ["--help"]
Concerns: Entrypoint 'chaos' assumes the installed package exposes a console script named 'chaos'; if not, the final image won't be runnable., Copying the entire repository into the build stage could include large or unnecessary files; ensure a proper .dockerignore to keep the image lean., Moving a pre-built virtual environment between images can be brittle if the base image differs or if system libraries mismatch; consider validating ABI compatibility or rebuilding in the final stage. Smoke [PASS]: chaos --help Smoke [PASS]: chaos --version Smoke [PASS]: command -v chaos