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 pselenca i container in esecuzione.-qfa 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
$CONTAINERconterrà 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.