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.

Torna su