From 1c63f59a286efaa04247ee86e51fdcf9be4e491c Mon Sep 17 00:00:00 2001 From: Hermes Date: Thu, 5 Nov 2026 16:01:54 +0100 Subject: [PATCH] Adoption d'un conteneur lance par docker run (stop + rename, rollback conserve) --- README.md | 16 ++++++++++++++++ install.sh | 24 ++++++++++++++++++++++++ 2 files changed, 40 insertions(+) diff --git a/README.md b/README.md index cd0120d..f291f8d 100644 --- a/README.md +++ b/README.md @@ -60,6 +60,22 @@ curl -fsSL .../install.sh | sudo bash -s -- --tag v50 L'installeur sauvegarde le `docker-compose.yml` précédent en `.bak.` s'il change, et ne touche jamais `config/`, `data/` ni `log/`. +## Adoption d'un conteneur existant + +Si un conteneur `streambox-aio` tourne déjà mais a été créé par `docker run` +(sans labels compose), `docker compose up -d` échouerait sur un conflit de nom. +L'installeur le détecte, l'**arrête** et le renomme +`streambox-aio.avant-compose.` — il n'est pas supprimé. Il reste le +rollback immédiat : + +```bash +docker rm -f streambox-aio +docker rename streambox-aio.avant-compose. streambox-aio +docker start streambox-aio +``` + +Un conteneur déjà géré par ce projet compose est simplement recréé. + ## Rollback ```bash diff --git a/install.sh b/install.sh index 49836f3..3dc7010 100755 --- a/install.sh +++ b/install.sh @@ -142,6 +142,26 @@ else die "aucune image $FULL_IMAGE en local. Utilise --tar, --from-ssh, ou --image REPO:TAG" fi +# ------------------------------------ 3bis. adoption d'un conteneur hors compose +# Un conteneur créé par `docker run` bloquera `up -d` (nom déjà pris). On l'arrête +# et on le renomme au lieu de le supprimer : il reste le rollback immédiat. +COMPOSE_PROJECT="${COMPOSE_PROJECT:-$(basename "$INSTALL_DIR")}" +BACKUP_NAME="" +if docker inspect streambox-aio >/dev/null 2>&1; then + proj="$(docker inspect -f '{{index .Config.Labels "com.docker.compose.project"}}' streambox-aio 2>/dev/null || true)" + if [ "$proj" != "$COMPOSE_PROJECT" ]; then + BACKUP_NAME="streambox-aio.avant-compose.$(date +%Y%m%d%H%M%S)" + log "Conteneur existant hors compose (projet='${proj:-aucun}')" + if [ "$DRY" = 1 ]; then + printf ' [dry-run] docker stop streambox-aio && docker rename streambox-aio %s\n' "$BACKUP_NAME" + else + docker stop streambox-aio >/dev/null + docker rename streambox-aio "$BACKUP_NAME" + ok "ancien conteneur arrêté et conservé sous $BACKUP_NAME" + fi + fi +fi + # ----------------------------------------------------------------- 4. démarrage log "Démarrage" if [ "$DRY" = 1 ]; then @@ -169,6 +189,10 @@ for _ in $(seq 1 "$WAIT"); do printf ' UI : http://%s:%s\n' "$(hostname -I 2>/dev/null | awk '{print $1}')" "$UI_PORT" printf ' Logs : cd %s && docker compose logs -f\n' "$INSTALL_DIR" printf ' Rollback: IMAGE_TAG= docker compose up -d\n' + if [ -n "$BACKUP_NAME" ]; then + printf ' Retour au conteneur manuel :\n' + printf ' docker rm -f streambox-aio && docker rename %s streambox-aio && docker start streambox-aio\n' "$BACKUP_NAME" + fi exit 0 fi sleep 1