From b791e0e6cc1b7d275d349b5a65cb86c3cb5116a8 Mon Sep 17 00:00:00 2001 From: ErickHub192 Date: Sat, 12 Sep 2026 14:59:23 -0600 Subject: [PATCH] La imagen que falta se rehace en el mismo turno MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Probado en el servidor: con el fix anterior, borrar la imagen con Multi corriendo hacia que la primera sala fallara y la segunda se curara sola. El diseño era correcto, pero esa primera sala es una persona mirando algo que no arranca sin saber por que. Ahora, cuando el `docker run` falla porque la imagen no esta, se reconstruye y se reintenta ahi mismo. Tarda medio minuto desde cache, que es menos de lo que cuesta explicarle a alguien por que su sala no sirve. Se distingue por el mensaje de Docker, igual que ya se hacia con el nombre ocupado, y no se toca el caso general: cualquier otro fallo sigue poniendo la imagen en duda para la proxima sala. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_01L1nFf8JaKeGedJ6RaZQYZ8 --- server/src/engine/container.ts | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/server/src/engine/container.ts b/server/src/engine/container.ts index fb6283c..e437622 100644 --- a/server/src/engine/container.ts +++ b/server/src/engine/container.ts @@ -222,11 +222,23 @@ export async function startContainer( if (String(err).includes("already in use")) { await removeContainer(name); await execFileP("docker", args, { timeout: 60_000 }); + } else if (/Unable to find image|No such image|pull access denied/i.test(String(err))) { + /** + * La imagen se fue mientras el proceso creía tenerla. + * + * Se reconstruye y se reintenta AQUÍ, no en la sala siguiente. Probado + * en el servidor: dejarlo para la próxima funciona, pero la primera + * sala que llega paga el error completo, y esa es una persona mirando + * una sala que no arranca sin saber por qué. La imagen tarda medio + * minuto en rehacerse desde caché, que es menos que explicarlo. + */ + console.warn(`[docker] la imagen ${IMAGE_TAG} ya no está; se reconstruye`); + imagenVerificada = false; + await ensureImage(); + await execFileP("docker", args, { timeout: 60_000 }); } else { // Cualquier otro fallo pone en duda la imagen, así que la próxima sala - // vuelve a comprobarla. Es lo que cura solo el caso que motivó todo - // esto: la imagen desaparece, la primera sala falla, y la siguiente la - // reconstruye sin que nadie tenga que enterarse. + // vuelve a comprobarla. imagenVerificada = false; throw err; }