Skip to content

Docker Hub publishing has been failing since March — nodeodm:gpu frozen at 2025-10-22, GPU SIFT silently broken #271

Description

@erickeller

Summary

None of the three Publish Docker* workflows have succeeded since April. opendronemap/nodeodm:gpu has therefore not been rebuilt since 2025-10-22, while its own base image opendronemap/odm:gpu was rebuilt 2026-08-04. Users pulling the current tag get a ~10-month-old image, and on it GPU SIFT cannot work at all — silently, with no error in the task log.

CI status

Workflow File Last success Latest runs
Publish Docker .github/workflows/publish-docker.yaml 2026-03-25 failure 2026-04-30, 2026-04-28
Publish Docker GPU .github/workflows/publish-docker-gpu.yaml (before 2026-03-13) failure 2026-04-30, 04-28, 03-25, 03-17, 03-17, 03-13
Publish Docker Intel GPU .github/workflows/publish-docker-gpu-intel.yaml 2026-03-17 failure 2026-04-30, 2026-04-28

Two distinct failure modes on the GPU workflow:

  • 2026-03-13 → 2026-03-25 — failed at step Build and push Docker image (includes two manual workflow_dispatch retries)
  • 2026-04-28, 2026-04-30 — failed at step Login to DockerHub, which looks like expired/missing Docker Hub credentials

There have been no workflow runs at all since 2026-04-30.

Docker Hub tag dates confirm the freeze:

tag last_updated
opendronemap/odm:gpu (base image) 2026-08-04
opendronemap/nodeodm:latest / master 2026-03-25
opendronemap/nodeodm:gpu.intel 2026-03-17
opendronemap/nodeodm:gpu 2025-10-22

The last successful gpu publish was the hotfix for #252. Since then every attempt has failed. #174 raised a related rebuild-cadence problem.

Impact: GPU SIFT is silently disabled in the published image

In the current opendronemap/nodeodm:gpu (sha256:214fe6a4421fe5283648400e9ce455457bb866c87a20a325fddfd494e4ad482a), the CUDA 11 runtime is missing, so opensfm's pypopsift can never load:

$ ls -la /usr/local/cuda-11.8/targets/x86_64-linux/lib/ | grep cudart
lrwxrwxrwx 1 root root      17 Sep 21  2022 libcudart.so -> libcudart.so.11.0   # dangling
-rw-r--r-- 1 root root 1198880 Sep 21  2022 libcudart_static.a

$ ldd /code/SuperBuild/install/bin/opensfm/opensfm/pypopsift.cpython-38-x86_64-linux-gnu.so | grep cuda
        libcudart.so.11.0 => not found

$ dpkg -l | grep -i cuda | awk '{print $2, $3}'
cuda-toolkit-11-8-config-common 11.8.89-1
cuda-toolkit-11-config-common 11.8.89-1
cuda-toolkit-config-common 12.3.52-1
libcufile-11-8 1.4.0.31-1
libcusolver-11-8 11.4.1.48-1
libnccl2 2.16.2-1+cuda11.8
# no cuda-cudart package at all

Result, from inside the running container:

$ docker exec -w /code webodm-node-odm-1 python3 -c \
    "from opendm.gpu import get_cuda_compute_version, has_popsift_and_can_handle_texsize as f; \
     print(get_cuda_compute_version(0)); print(f(4032,3024))"
(8, 9)
[WARNING] libcudart.so.11.0: cannot open shared object file: No such file or directory
False

has_popsift_and_can_handle_texsize() swallows this as a warning, so opendm/osfm.py quietly falls back to CPU feature extraction. Nothing in the task log indicates a problem — the job simply runs several times slower. Searching the org for libcudart returns 0 issues, which I suspect is because the failure is invisible rather than because it is rare.

This appears to be collateral from the fix for the CUDA 11.2 conflict discussed in
https://community.opendronemap.org/t/opendronemap-nodeodm-gpu-nvidia-smi-detected-cannot-initialize-cuda/21124
cuda-cudart-11-2 was removed and nothing installed cuda-cudart-11-8 in its place. A rebuild
on the current opendronemap/odm:gpu (CUDA 12.9 / Ubuntu 24.04) should resolve it, together with
ODM PR #2060 ("Restore DEPENDS opensfm for PyPopsift GPU module install order", merged 2026-08-04).

Minor, related

Dockerfile.gpu on master still contains:

RUN echo /usr/local/cuda-11.2/compat >> /etc/ld.so.conf.d/989_cuda-11.conf && ldconfig

/usr/local/cuda-11.2/compat does not exist in the built image — it leaves a dangling entry in
/etc/ld.so.conf.d/. Probably obsolete now that the base is on CUDA 12.9.

Suggested actions

  1. Refresh the Docker Hub credentials used by the Publish Docker* workflows.
  2. Re-run publish-docker-gpu.yaml and confirm the March Build and push Docker image failure is resolved by the newer opendronemap/odm:gpu base.
  3. Consider a scheduled rebuild, or a trigger on base-image updates, so nodeodm:gpu cannot drift ~10 months behind odm:gpu again.
  4. Drop the cuda-11.2/compat line from Dockerfile.gpu.

Environment

  • Host: Ubuntu, NVIDIA RTX 4060 Ti 16 GB, driver 580.173.02 (CUDA 13.0), compute capability 8.9
  • WebODM 3.0.1, opendronemap/nodeodm:gpu @ sha256:214fe6a4… (ODM 3.5.6)
  • nvidia-container-toolkit 1.19.1; GPU is correctly passed into the container (nvidia-smi works inside, OpenMVS densification does use CUDA)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions