Zum Inhalt springen
ecdsa.com
Docker Engine (dockerd)Docker und Kubernetes

Fehlermeldung

Error response from daemon: Get "https://registry.example.com:5000/v2/": tls: failed to verify certificate: x509: certificate signed by unknown authority

Host und Port der Registry sind deine eigenen; docker push, pull und login melden es alle als „Error response from daemon: Get \"https://<registry>/v2/\": …“. containerd, nerdctl, Podman und Kubernetes-Knoten, die Images ziehen, geben denselben x509-Text mit ihrem eigenen Präfix aus.

Docker Engine (dockerd) — docker pull / push / login against a registry with an untrusted certificate

Was der Fehler bedeutet

Der Docker-Daemon (nicht die docker-CLI) hat versucht, die API der Registry unter /v2/ zu erreichen, und konnte ihr TLS-Zertifikat nicht prüfen: Die Kette führt zu keiner CA, der der Daemon vertraut. dockerd vertraut dem System-CA-Bundle des Hosts sowie CAs pro Registry, die unter /etc/docker/certs.d/<registry>:<port>/ abgelegt sind. Die üblichen Ursachen sind private Registrys mit Firmenzertifikaten und Proxys mit TLS-Inspektion.

Warum der Fehler auftritt

So behebst du den Fehler

  1. 1.

    CA für diese Registry in certs.d installieren

    /etc/docker/certs.d/<host>:<port>/ca.crt wird bei jeder Anfrage gelesen; in der Reproduktion funktionierte docker login direkt nach dem Hinzufügen der Datei.

    bash
    # Trust the registry's CA for this registry only (no daemon restart needed)
    sudo mkdir -p /etc/docker/certs.d/registry.example.com:5000
    sudo cp corp-root-ca.pem /etc/docker/certs.d/registry.example.com:5000/ca.crt
    docker login registry.example.com:5000
  2. 2.

    CA systemweit installieren und dockerd neu starten

    Füge für Proxys und viele Registrys das Root-Zertifikat dem Bundle des Hosts hinzu; der Daemon liest es beim Start.

    bash
    # Or system-wide (proxy roots, many registries), then restart the daemon
    sudo cp corp-root-ca.pem /usr/local/share/ca-certificates/corp-root-ca.crt
    sudo update-ca-certificates
    sudo systemctl restart docker
  3. 3.

    Docker Desktop: dem Root-Zertifikat auf dem Host vertrauen

    Die VM von Docker Desktop übernimmt beim Start die vertrauenswürdigen Root-Zertifikate des Host-Betriebssystems; installiere das Root-Zertifikat also dort und starte Docker Desktop neu.

    text
    Docker Desktop: the daemon runs in a VM. Add the root to the host's trust store
    (macOS Keychain "System" with "Always Trust", Windows "Trusted Root Certification Authorities")
    and restart Docker Desktop; it imports trusted host roots into the VM.
  4. 4.

    Kette der Registry prüfen

    Wird nur das Leaf-Zertifikat gesendet, konfiguriere die Registry oder ihren Reverse Proxy mit der vollständigen Kette.

    bash
    openssl s_client -connect registry.example.com:5000 -servername registry.example.com -showcerts </dev/null 2>/dev/null \
      | grep -E '^ *[0-9]+ s:|^ *i:'

Verwandte Fehler

Gesamte Signaturfehler-Datenbank durchsuchen