Las imágenes de Docker de Discourse no están firmadas

Hola,

Actualmente estoy intentando configurar Discourse en una nueva máquina. Cloné el repositorio discourse_docker y ejecuté ./launcher rebuild app. (Omití el proceso de arranque porque ya tenía configuraciones previas).

La reconstrucción generó la siguiente salida:

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

Para llegar al origen del problema, verifiqué el comando que se ejecuta y lo ejecuté en modo depuración:

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

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

La salida del comando:
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'.

No tengo idea de por qué ocurre esto. Verifiqué el historial de git y volví a la imagen base utilizada anteriormente para comprobar si funcionaba. El resultado fue el mismo.

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

Cualquier ayuda será bien recibida :slight_smile:

Actualización #1

He creado un post en el foro de Docker para discutir este problema, tal como sugirió @Falco.

¿Puedes actualizar Docker a la versión más reciente disponible para tu sistema operativo e intentarlo de nuevo?

Gracias por tu respuesta @Falco.

Estoy ejecutando la versión más reciente de Docker:

Docker version 19.03.5, build 633a0ea838

Ver: Engine v29 | Docker Docs

Disculpa por no haber mencionado esto antes :roll_eyes:

¿Entonces un simple

docker pull discourse/base:2.0.20191219-2109

está fallando?

Sí. Este comando falla de la misma manera que se describe en mi publicación inicial:

ERRO[0001] Los metadatos para los objetivos han caducado
ERRO[0002] Los metadatos para los objetivos han caducado
Error: el repositorio remoto docker.io/discourse/base está desactualizado: los objetivos caducaron el lunes 18 de noviembre a las 12:52:09 -0500 2019

Eso es muy extraño. ¿Está bien la hora de tu servidor? ¿Tienes algún problema extraño de caché, firewall o algo así?

@Falco Mi reloj parece estar sincronizado:

$ timedatectl status

                      Hora local: Vie 2019-12-27 19:57:48 CET
                  Hora universal: Vie 2019-12-27 18:57:48 UTC
                        Hora RTC: Vie 2019-12-27 18:57:49
                       Zona horaria: Europe/Berlin (CET, +0100)
       Reloj del sistema sincronizado: sí
servicio systemd-timesyncd activo: sí
                 RTC en zona local: no

Estoy ejecutando Ubuntu 18.04 LTS.

También quiero mencionar que otros contenedores funcionan perfectamente. Parece que está relacionado de alguna manera con la imagen de Discourse.

Bueno, puedo ejecutar docker pull discourse/base:2.0.20191219-2109 sin problemas en muchos sistemas operativos, en diferentes proveedores de nube y en distintos continentes, así que diría que se trata de algo específico de tu computadora local o de tu instalación de Docker.

Como esto proviene del servicio docker, intenta buscar ayuda en https://forums.docker.com/

Lo haré @Falco. Gracias por tu ayuda hasta ahora :slight_smile:

@Falco He creado una publicación en los foros de Docker y he recibido una respuesta.

El problema está relacionado con DOCKER_CONTENT_TRUST=1.

Para reproducir este problema, puedes ejecutar los siguientes comandos:

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

Ah, ya veo. ¿Por qué configuraste esta bandera en tu máquina local? No viene habilitada de forma predeterminada en Ubuntu.

Estoy configurando un servidor en Internet. No se trata de mi máquina local. El servidor debería estar “endurecido”, y por eso esta opción está habilitada.

Tampoco viene habilitado de forma predeterminada en Ubuntu Server.

Eso es correcto, @Falco. Lo habilité. Por lo que puedo ver, las imágenes de Discourse no están correctamente firmadas o no tienen firma alguna (actualmente estoy investigando).

De todos modos, sería deseable tener imágenes/etiquetas firmadas. Podría imaginar que no soy el único que utiliza DCT.

Esto forma parte de herramientas de auditoría como Docker Bench Security (véase a continuación):

4.5  - Asegurar que la confianza en el contenido de Docker esté habilitada

Por ahora puedo desactivarlo, pero sería genial obtener una imagen/etiqueta firmada también para las imágenes de Discourse :slight_smile:

¿Debería crear una solicitud de función para que podamos cerrar este problema?

Por ahora, estás saliendo de las instrucciones para una instalación recomendada, por lo que esto se marcará como no compatible, para que otros no cometan el mismo error.