Come ottenere dinamicamente l'ID di un container Docker in uno script Bash

Come ottenere dinamicamente l'ID di un container Docker in uno script Bash

Quando si lavora con Docker, può capitare di dover eseguire comandi all'interno di un container. Un esempio tipico è l'esportazione di un database con pg_dump da un container PostgreSQL. Se nello script si inserisce l'ID del container in modo statico, ad ogni rebuild sarà necessario modificarlo, rendendo il processo poco pratico e soggetto a errori.

Il problema dell'ID statico

L'ID di un container è generato dinamicamente ogni volta che viene creato. Questo significa che, se si utilizza un ID hardcoded in uno script, questo smetterà di funzionare dopo un rebuild o un restart del container.

La soluzione: ricavare l'ID in modo dinamico

Possiamo usare il comando docker ps con l'opzione -q per ottenere solo l'ID del container e il filtro -f name=... per selezionare il container in base al nome.

#!/bin/bash

# Sostituisci "postgres" con il nome (o parte del nome) del tuo container
CONTAINER=$(docker ps -qf "name=postgres")

docker exec "$CONTAINER" pg_dump -U username dbname > dbname.sql

Come funziona

  • docker ps elenca i container in esecuzione.
  • -q fa sì che venga stampato solo l'ID del container.
  • -f "name=postgres" filtra i container in base al nome (può essere un match parziale).
  • La variabile $CONTAINER conterrà l'ID del container selezionato, che poi viene passato a docker exec.

Vantaggi di questo approccio

Questo metodo elimina la necessità di aggiornare manualmente lo script dopo ogni rebuild del container. Inoltre, rende il codice più leggibile e portabile, soprattutto se condiviso in un team o integrato in processi di automazione.