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 adocker 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.