diff --git a/docker/Dockerfile.nmp-customizer-tasks b/docker/Dockerfile.nmp-customizer-tasks index 92c41c70ef..cb003550f5 100644 --- a/docker/Dockerfile.nmp-customizer-tasks +++ b/docker/Dockerfile.nmp-customizer-tasks @@ -76,6 +76,7 @@ RUN --mount=type=cache,target=/root/.cache/uv \ "grpcio>=1.81.1,<2" \ "jupyter-server>=2.20.0,<3" \ "mistune>=3.3.3,<4" \ + "pillow>=12.3.0,<13" \ "soupsieve>=2.8.4,<3" \ "tornado>=6.5.7,<7" \ "urllib3>=2.7.0,<3" \ @@ -107,6 +108,9 @@ RUN apt-get update && \ /usr/local/lib/python3.12/dist-packages/mlflow \ /usr/local/lib/python3.12/dist-packages/mlflow-*.dist-info \ /usr/local/lib/python3.12/dist-packages/mlflow_skinny-*.dist-info \ + /usr/local/lib/python3.12/dist-packages/PIL \ + /usr/local/lib/python3.12/dist-packages/pillow.libs \ + /usr/local/lib/python3.12/dist-packages/pillow-*.dist-info \ /usr/local/lib/python3.12/dist-packages/mistune \ /usr/local/lib/python3.12/dist-packages/mistune-*.dist-info \ /usr/local/lib/python3.12/dist-packages/soupsieve \ diff --git a/docker/Dockerfile.nmp-rl-base b/docker/Dockerfile.nmp-rl-base index 191f01da84..d095132f1c 100644 --- a/docker/Dockerfile.nmp-rl-base +++ b/docker/Dockerfile.nmp-rl-base @@ -26,6 +26,15 @@ ENV VIRTUAL_ENV=/opt/nemo_rl_venv \ # editable installs in the training image can write. RUN chmod 755 /root /root/.cache /root/.cache/uv /root/.local /root/.local/share /root/.local/share/uv 2>/dev/null || true +# CVE remediation for fixable Ubuntu packages inherited from the NeMo-RL base. +RUN apt-get update && \ + DEBIAN_FRONTEND=noninteractive apt-get install -y --only-upgrade \ + libssl3t64 \ + openssl \ + rsync && \ + apt-get clean && \ + rm -rf /var/lib/apt/lists/* + # NeMo-RL is installed EDITABLE in this base: its source tree lives at # /opt/nemo-rl (root-owned, non-traversable) and the editable import finder # os.stat()s files under it at import time. The training image drops to diff --git a/docker/Dockerfile.nmp-rl-training b/docker/Dockerfile.nmp-rl-training index 5e57e1ec04..a095d6600a 100644 --- a/docker/Dockerfile.nmp-rl-training +++ b/docker/Dockerfile.nmp-rl-training @@ -77,6 +77,26 @@ RUN --mount=from=ffmpeg-vlm-wheel-src,target=/tmp/ffmpeg-vlm-wheel-src,readonly /tmp/ffmpeg-vlm-wheel-src/wheels/opencv_python_headless-*cp313*.whl \ /tmp/ffmpeg-vlm-wheel-src/wheels/decord2-*cp313*.whl +# Replace Pillow copies that can be left in the inherited NeMo-RL venv/uv cache. +RUN --mount=type=cache,target=/root/.cache/uv \ + set -e; \ + for site in ${VIRTUAL_ENV}/lib/python*/site-packages; do \ + [ -d "${site}" ] || continue; \ + rm -rf \ + "${site}/PIL" \ + "${site}/pillow.libs" \ + "${site}"/pillow-*.dist-info; \ + done; \ + for archive in /root/.cache/uv/archive-v0/*; do \ + [ -d "${archive}" ] || continue; \ + if [ -e "${archive}/pillow.libs" ] || \ + [ -e "${archive}/pillow-12.2.0.dist-info" ]; then \ + rm -rf "${archive}"; \ + fi; \ + done; \ + uv pip install --python ${VIRTUAL_ENV}/bin/python --no-cache --no-deps --reinstall \ + "pillow>=12.3.0,<13" + # The NeMo-RL base venv ships some packages with missing dist-info METADATA (a # known property of the image — the package code is present, only uv's metadata # file is gone). Normal `uv pip install` reads ALL installed metadata during diff --git a/docker/Dockerfile.nmp-unsloth-training b/docker/Dockerfile.nmp-unsloth-training index 19a68bf22e..61729e72e3 100644 --- a/docker/Dockerfile.nmp-unsloth-training +++ b/docker/Dockerfile.nmp-unsloth-training @@ -178,6 +178,7 @@ RUN --mount=type=cache,target=/root/.cache/uv \ "urllib3>=2.7.0,<3" \ "grpcio>=1.81.1,<2" \ "mistune>=3.3.3,<4" \ + "pillow>=12.3.0,<13" \ "soupsieve>=2.8.4,<3" \ "mlflow-skinny>=3.11.1,<3.12.0" @@ -207,6 +208,9 @@ RUN rm -rf \ /usr/local/lib/python3.12/dist-packages/mlflow \ /usr/local/lib/python3.12/dist-packages/mlflow-*.dist-info \ /usr/local/lib/python3.12/dist-packages/mlflow_skinny-*.dist-info \ + /usr/local/lib/python3.12/dist-packages/PIL \ + /usr/local/lib/python3.12/dist-packages/pillow.libs \ + /usr/local/lib/python3.12/dist-packages/pillow-*.dist-info \ /usr/local/lib/python3.12/dist-packages/mistune \ /usr/local/lib/python3.12/dist-packages/mistune-*.dist-info \ /usr/local/lib/python3.12/dist-packages/soupsieve \ diff --git a/docker/automodel/Dockerfile.nmp-automodel-base b/docker/automodel/Dockerfile.nmp-automodel-base index d27a304f7a..491b8d312c 100644 --- a/docker/automodel/Dockerfile.nmp-automodel-base +++ b/docker/automodel/Dockerfile.nmp-automodel-base @@ -168,6 +168,9 @@ RUN rm -rf \ /usr/local/lib/python3.12/dist-packages/mlflow \ /usr/local/lib/python3.12/dist-packages/mlflow-*.dist-info \ /usr/local/lib/python3.12/dist-packages/mlflow_skinny-*.dist-info \ + /usr/local/lib/python3.12/dist-packages/PIL \ + /usr/local/lib/python3.12/dist-packages/pillow.libs \ + /usr/local/lib/python3.12/dist-packages/pillow-*.dist-info \ /usr/local/lib/python3.12/dist-packages/mistune \ /usr/local/lib/python3.12/dist-packages/mistune-*.dist-info \ /usr/local/lib/python3.12/dist-packages/soupsieve \