Discourse Docker-Images sind nicht signiert

Hallo,

ich versuche derzeit, Discourse auf einer neuen Maschine einzurichten. Ich habe das discourse_docker-Repository ausgecheckt und ./launcher rebuild app ausgeführt. (Ich habe das Bootstrapping übersprungen, da ich bereits Konfigurationen von zuvor hatte).

Der Neuaufbau ergab folgende Ausgabe:

WARNING: We are about to start downloading the Discourse base image
This process may take anywhere between a few minutes to an hour, depending on your network speed

Please be patient

ERRO[0001] Metadata for targets expired
ERRO[0002] Metadata for targets expired
/usr/bin/docker: Error: remote repository docker.io/discourse/base out-of-date: targets expired at Mon Nov 18 12:52:09 -0500 2019.
See '/usr/bin/docker run --help'.
Your Docker installation is not working correctly

See: https://meta.discourse.org/t/docker-error-on-bootstrap/13657/18?u=sam

Um der Ursache des Problems auf den Grund zu gehen, habe ich den ausgeführten Befehl überprüft und ihn im Debug-Modus ausgeführt:

/usr/bin/docker --debug run -i --rm -a stdout -a stderr discourse/base:2.0.20191219-2109 echo working

Siehe: discourse_docker/launcher at 1b3dd3a41b544592be46b39db563bb757f88bbad · discourse/discourse_docker · GitHub

Die Ausgabe des Befehls:
DEBU[0000] reading certificate directory: /root/.docker/tls/notary.docker.io
DEBU[0000] No yubikey found, using alternative key storage: no library found
DEBU[0000] Making dir path: /root/.docker/trust/tuf/docker.io/discourse/base/changelist
DEBU[0000] entered ValidateRoot with dns: docker.io/discourse/base
DEBU[0000] found the following root keys: [5f5ba22b20768b8f2d49e9035400a1922ae761aa70b5bb0d930fe91dd06bd5d8]
DEBU[0000] found 1 valid leaf certificates for docker.io/discourse/base: 5f5ba22b20768b8f2d49e9035400a1922ae761aa70b5bb0d930fe91dd06bd5d8
DEBU[0000] found 1 leaf certs, of which 1 are valid leaf certs for docker.io/discourse/base
DEBU[0000] checking root against trust_pinning config for docker.io/discourse/base
DEBU[0000] checking trust-pinning for cert: 5f5ba22b20768b8f2d49e9035400a1922ae761aa70b5bb0d930fe91dd06bd5d8
DEBU[0000]  role has key IDs: 5f5ba22b20768b8f2d49e9035400a1922ae761aa70b5bb0d930fe91dd06bd5d8
DEBU[0000] verifying signature for key ID: 5f5ba22b20768b8f2d49e9035400a1922ae761aa70b5bb0d930fe91dd06bd5d8
DEBU[0000] root validation succeeded for docker.io/discourse/base
DEBU[0000] entered ValidateRoot with dns: docker.io/discourse/base
DEBU[0000] found the following root keys: [5f5ba22b20768b8f2d49e9035400a1922ae761aa70b5bb0d930fe91dd06bd5d8]
DEBU[0000] found 1 valid leaf certificates for docker.io/discourse/base: 5f5ba22b20768b8f2d49e9035400a1922ae761aa70b5bb0d930fe91dd06bd5d8
DEBU[0000] found 1 leaf certs, of which 1 are valid leaf certs for docker.io/discourse/base
DEBU[0000] checking root against trust_pinning config for docker.io/discourse/base
DEBU[0000] checking trust-pinning for cert: 5f5ba22b20768b8f2d49e9035400a1922ae761aa70b5bb0d930fe91dd06bd5d8
DEBU[0000]  role has key IDs: 5f5ba22b20768b8f2d49e9035400a1922ae761aa70b5bb0d930fe91dd06bd5d8
DEBU[0000] verifying signature for key ID: 5f5ba22b20768b8f2d49e9035400a1922ae761aa70b5bb0d930fe91dd06bd5d8
DEBU[0000] root validation succeeded for docker.io/discourse/base
DEBU[0000] updating TUF client
DEBU[0000] Loading timestamp...
DEBU[0001] 200 when retrieving metadata for timestamp
DEBU[0001] timestamp role has key IDs: db679e1f17a2a2bdd9952b6f37c9048635611f162bc6a0957ec30fbb1412d366
DEBU[0001] verifying signature for key ID: db679e1f17a2a2bdd9952b6f37c9048635611f162bc6a0957ec30fbb1412d366
DEBU[0001] timestamp role has key IDs: db679e1f17a2a2bdd9952b6f37c9048635611f162bc6a0957ec30fbb1412d366
DEBU[0001] verifying signature for key ID: db679e1f17a2a2bdd9952b6f37c9048635611f162bc6a0957ec30fbb1412d366
DEBU[0001] successfully verified downloaded timestamp
DEBU[0001] Loading snapshot...
DEBU[0001] snapshot role has key IDs: e88a99d5b23301178976a4a103df4716f7943301d9972db0541bfa17c94cb75b
DEBU[0001] verifying signature for key ID: e88a99d5b23301178976a4a103df4716f7943301d9972db0541bfa17c94cb75b
DEBU[0001] successfully verified cached snapshot
DEBU[0001] Loading targets...
DEBU[0001] no targets in cache, must download
DEBU[0001] 200 when retrieving metadata for targets.09b50021560effa664eb8271cd16e2212ed55b7b63b2127cf9a0e69cfe2b47b7
DEBU[0001] targets role has key IDs: c016860a9293a48bc98f27b9c36d81515f4bcc3dd2ec93bb2d6d8af8f37a39d2
DEBU[0001] verifying signature for key ID: c016860a9293a48bc98f27b9c36d81515f4bcc3dd2ec93bb2d6d8af8f37a39d2
ERRO[0001] Metadata for targets expired
DEBU[0001] downloaded targets.09b50021560effa664eb8271cd16e2212ed55b7b63b2127cf9a0e69cfe2b47b7 is invalid: targets expired at Mon Nov 18 12:52:09 -0500 2019
DEBU[0001] Client Update (Targets): targets expired at Mon Nov 18 12:52:09 -0500 2019
DEBU[0001] Error occurred. Root will be downloaded and another update attempted
DEBU[0001] Resetting the TUF builder...
DEBU[0001] entered ValidateRoot with dns: docker.io/discourse/base
DEBU[0001] found the following root keys: [5f5ba22b20768b8f2d49e9035400a1922ae761aa70b5bb0d930fe91dd06bd5d8]
DEBU[0001] found 1 valid leaf certificates for docker.io/discourse/base: 5f5ba22b20768b8f2d49e9035400a1922ae761aa70b5bb0d930fe91dd06bd5d8
DEBU[0001] found 1 leaf certs, of which 1 are valid leaf certs for docker.io/discourse/base
DEBU[0001] found the following root keys: [5f5ba22b20768b8f2d49e9035400a1922ae761aa70b5bb0d930fe91dd06bd5d8]
DEBU[0001] found 1 valid leaf certificates for docker.io/discourse/base: 5f5ba22b20768b8f2d49e9035400a1922ae761aa70b5bb0d930fe91dd06bd5d8
DEBU[0001] found 1 valid root leaf certificates for docker.io/discourse/base: 5f5ba22b20768b8f2d49e9035400a1922ae761aa70b5bb0d930fe91dd06bd5d8
DEBU[0001]  role has key IDs: 5f5ba22b20768b8f2d49e9035400a1922ae761aa70b5bb0d930fe91dd06bd5d8
DEBU[0001] verifying signature for key ID: 5f5ba22b20768b8f2d49e9035400a1922ae761aa70b5bb0d930fe91dd06bd5d8
DEBU[0001] checking root against trust_pinning config for docker.io/discourse/base
DEBU[0001] checking trust-pinning for cert: 5f5ba22b20768b8f2d49e9035400a1922ae761aa70b5bb0d930fe91dd06bd5d8
DEBU[0001]  role has key IDs: 5f5ba22b20768b8f2d49e9035400a1922ae761aa70b5bb0d930fe91dd06bd5d8
DEBU[0001] verifying signature for key ID: 5f5ba22b20768b8f2d49e9035400a1922ae761aa70b5bb0d930fe91dd06bd5d8
DEBU[0001] root validation succeeded for docker.io/discourse/base
DEBU[0001] successfully verified cached root
DEBU[0001] retrying TUF client update
DEBU[0001] Loading timestamp...
DEBU[0002] 200 when retrieving metadata for timestamp
DEBU[0002] timestamp role has key IDs: db679e1f17a2a2bdd9952b6f37c9048635611f162bc6a0957ec30fbb1412d366
DEBU[0002] verifying signature for key ID: db679e1f17a2a2bdd9952b6f37c9048635611f162bc6a0957ec30fbb1412d366
DEBU[0002] successfully verified downloaded timestamp
DEBU[0002] Loading snapshot...
DEBU[0002] snapshot role has key IDs: e88a99d5b23301178976a4a103df4716f7943301d9972db0541bfa17c94cb75b
DEBU[0002] verifying signature for key ID: e88a99d5b23301178976a4a103df4716f7943301d9972db0541bfa17c94cb75b
DEBU[0002] successfully verified cached snapshot
DEBU[0002] Loading targets...
DEBU[0002] no targets in cache, must download
DEBU[0002] 200 when retrieving metadata for targets.09b50021560effa664eb8271cd16e2212ed55b7b63b2127cf9a0e69cfe2b47b7
DEBU[0002] targets role has key IDs: c016860a9293a48bc98f27b9c36d81515f4bcc3dd2ec93bb2d6d8af8f37a39d2
DEBU[0002] verifying signature for key ID: c016860a9293a48bc98f27b9c36d81515f4bcc3dd2ec93bb2d6d8af8f37a39d2
ERRO[0002] Metadata for targets expired
DEBU[0002] downloaded targets.09b50021560effa664eb8271cd16e2212ed55b7b63b2127cf9a0e69cfe2b47b7 is invalid: targets expired at Mon Nov 18 12:52:09 -0500 2019
DEBU[0002] Client Update (Targets): targets expired at Mon Nov 18 12:52:09 -0500 2019
/usr/bin/docker: Error: remote repository docker.io/discourse/base out-of-date: targets expired at Mon Nov 18 12:52:09 -0500 2019.
See '/usr/bin/docker run --help'.

Ich habe keine Ahnung, warum das passiert. Ich habe die Git-Historie überprüft und zum zuvor verwendeten Basis-Image zurückgekehrt, um zu prüfen, ob das funktioniert. Das Ergebnis war dasselbe.

Siehe: Bump base image · discourse/discourse_docker@1b3dd3a · GitHub

Jede Hilfe wäre willkommen :slight_smile:

Update #1

Ich habe wie von @Falco vorgeschlagen einen Beitrag im Docker-Forum erstellt, um dieses Problem zu diskutieren.

Kannst du Docker auf die neueste für dein Betriebssystem verfügbare Version aktualisieren und es erneut versuchen?

Danke für deine Antwort, @Falco.

Ich verwende die neueste Version von Docker:

Docker version 19.03.5, build 633a0ea838

Siehe: Docker Engine version 29 release notes | Docker Docs

Entschuldige, dass ich das vorher nicht erwähnt habe :roll_eyes:

Fehlt also einfach nur ein

docker pull discourse/base:2.0.20191219-2109

und das schlägt fehl?

Ja. Dieser Befehl schlägt auf die gleiche Weise fehl, wie in meinem ursprünglichen Beitrag beschrieben:

ERRO[0001] Metadaten für Ziele abgelaufen
ERRO[0002] Metadaten für Ziele abgelaufen
Fehler: Remote-Repository docker.io/discourse/base veraltet: Ziele abgelaufen am Mo, 18. Nov 12:52:09 -0500 2019

Das ist sehr seltsam. Ist die Serverzeit korrekt? Hast du irgendeine seltsame Caching-, Firewall- oder ähnliche Konfiguration?

@Falco Meine Uhr scheint synchronisiert zu sein:

$ timedatectl status

                      Local time: Fr 2019-12-27 19:57:48 CET
                  Universal time: Fr 2019-12-27 18:57:48 UTC
                        RTC time: Fr 2019-12-27 18:57:49
                       Time zone: Europe/Berlin (CET, +0100)
       System clock synchronized: yes
systemd-timesyncd.service active: yes
                 RTC in local TZ: no

Ich verwende Ubuntu 18.04 LTS.

Ich möchte auch erwähnen, dass andere Container einwandfrei laufen. Es scheint also irgendwie mit dem Discourse-Image zusammenzuhängen.

Nun, ich kann docker pull discourse/base:2.0.20191219-2109 problemlos ausführen – auf vielen Betriebssystemen, bei verschiedenen Cloud-Anbietern auf unterschiedlichen Kontinenten. Ich würde also sagen, es liegt an etwas Spezifischem auf Ihrem lokalen Computer oder Ihrer Docker-Installation.

Da dies vom docker-Dienst stammt, versuchen Sie, Hilfe unter https://forums.docker.com/ zu erhalten.

Mache ich, @Falco. Danke für deine bisherige Hilfe :slight_smile:

@Falco Ich habe einen Beitrag in den Docker-Foren erstellt und eine Antwort erhalten.

Das Problem hängt mit DOCKER_CONTENT_TRUST=1 zusammen.

Um dieses Problem zu reproduzieren, können Sie die folgenden Befehle ausführen:

$ export DOCKER_CONTENT_TRUST=1
$ docker pull discourse/base:2.0.20191219-2109

Ah, ich verstehe. Warum hast du dieses Flag auf deinem lokalen Rechner gesetzt? In Ubuntu ist es standardmäßig nicht aktiviert.

Ich richte einen Server im Internet ein. Dies befindet sich nicht auf meinem lokalen Rechner. Der Server soll „gehärtet

Es ist auch in Ubuntu Server standardmäßig nicht aktiviert.

Das ist korrekt, @Falco. Ich habe es aktiviert. Soweit ich feststellen konnte, sind die Discourse-Images entweder nicht ordnungsgemäß signiert oder gar nicht signiert (ich untersuche das derzeit).

Wie auch immer, es wäre wünschenswert, signierte Images/Tags zu haben. Ich kann mir vorstellen, dass ich nicht der Einzige bin, der DCT verwendet.

Es ist Teil von Audit-Tools wie Docker Bench Security (siehe unten):

4.5  - Stellen Sie sicher, dass Content Trust für Docker aktiviert ist

Vorläufig kann ich es deaktivieren, aber es wäre großartig, auch für die Discourse-Images ein signiertes Image/Tag zu erhalten :slight_smile:

Soll ich eine Feature-Anfrage erstellen, damit wir diesen Issue schließen können?

Da Sie derzeit von den Anweisungen für eine empfohlene Installation abweichen, wird dies als nicht unterstützt gekennzeichnet, damit andere denselben Fehler nicht machen.