9.1 Strumenti e comandi per il debug
Docker Compose semplifica molto lo sviluppo e il deployment di applicazioni multi-container, ma, come per qualsiasi tecnologia, possono sorgere problemi che richiedono debug e risoluzione. In questa lezione vedremo gli approcci e gli strumenti principali per trovare errori e fare debug delle applicazioni in Docker Compose.
Problemi principali e approcci per risolverli:
- Problemi con l'avvio dei container:
- Controllo dei log dei container.
- Controllo dello stato dei container.
- Controllo dei file di configurazione.
- Problemi di rete:
- Controllo delle connessioni di rete.
- Utilizzo di strumenti di rete all'interno dei container.
- Problemi con i volumi:
- Controllo del montaggio dei volumi.
- Controllo dei permessi di accesso ai volumi.
Strumenti e comandi per il debug:
1. Visualizzare i log dei container
I log dei container sono il primo posto da controllare in caso di problemi. Il comando docker compose logs
permette di visualizzare i log di tutti i servizi definiti nel file compose.yaml
.
docker compose logs
Puoi specificare un servizio specifico per visualizzare i suoi log:
docker compose logs <service_name>
2. Controllare lo stato dei container
Il comando docker compose ps
mostra informazioni sullo stato di tutti i container gestiti da Docker Compose.
docker compose ps
L'output di questo comando mostrerà lo stato, le porte e gli identificativi dei container.
3. Riavviare i container
Se un container non funziona correttamente, prova a riavviarlo:
docker compose restart <service_name>
4. Collegarsi a un container in esecuzione
Per un'indagine più approfondita del problema puoi collegarti a un container in esecuzione usando il comando docker compose exec
.
docker compose exec <service_name> /bin/bash
Questo comando aprirà un terminale all'interno del container, permettendoti di eseguire comandi diagnostici.
5. Utilizzo di strumenti di rete
Controllare le connessioni di rete all'interno dei container può aiutare nella diagnosi di problemi di rete. Puoi utilizzare strumenti come ping, curl, netcat e altri.
docker compose exec <service_name> ping <hostname>
docker compose exec <service_name> curl http://<hostname>
docker compose exec <service_name> netcat -z -v <hostname> <port>
9.2 Approcci avanzati
Approcci aggiuntivi per trovare errori
1. Controllare il file Docker Compose
Gli errori nel file compose.yaml
possono portare a un funzionamento scorretto dei container. Controlla la sintassi del file con il comando:
docker compose config
Questo comando controllerà il file alla ricerca di errori e stamperà la configurazione finale.
2. Usare Healthcheck
Puoi definire un healthcheck per i servizi in compose.yaml
, in modo che Docker controlli automaticamente lo stato dei container.
version: '3.8'
services:
web:
image: nginx:latest
ports:
- "80:80"
healthcheck:
test: ["CMD-SHELL", "curl -f http://localhost || exit 1"]
interval: 30s
timeout: 10s
retries: 3
3. Controllare il montaggio dei volumi
I problemi con i volumi possono sorgere a causa di montaggi errati o permessi di accesso insufficienti. Assicurati che i volumi siano montati correttamente e che i container abbiano accesso a essi.
version: '3.8'
services:
db:
image: postgres:latest
volumes:
- db-data:/var/lib/postgresql/data
volumes:
db-data:
3.1 Controllare la disponibilità del volume
Per controllare la disponibilità del volume da un container, puoi avviare il container ed eseguire un comando che verifica la presenza del volume (ad esempio, l'elenco dei file nel volume). Supponiamo che il volume sia montato nel container al percorso /mnt/volume:
docker run --rm -v my_volume:/mnt/volume alpine ls /mnt/volume
Se il volume è disponibile, il comando ls
stamperà l'elenco dei file e delle directory presenti nel volume. Se il volume non è disponibile o è vuoto, riceverai un messaggio corrispondente.
3.2 Controllare lo spazio disponibile nel volume
Per verificare quanto spazio è disponibile nel volume dall'interno del container, usa il comando df
:
docker run --rm -v my_volume:/mnt/volume alpine df -h /mnt/volume
Questo comando mostra lo spazio disponibile sul file system dove è montato il volume. L'opzione -h
stampa le informazioni in un formato leggibile (con unità di misura come MB, GB, ecc.).
4. Usare l'IDE
Per semplificare il debug, usa un IDE con funzionalità di debug e logging integrate. Puoi creare file di configurazione separati per lo sviluppo e la produzione utilizzando il parametro --file
.
docker compose --file docker-compose.dev.yml up
Importante!
Qui trovi una guida utile per configurare il debug remoto di un'applicazione eseguita all'interno di Docker tramite IntelliJ IDEA: Configurazione del debug remoto .
5. Controllare le variabili d'ambiente
Variabili d'ambiente errate o mancanti possono causare problemi. Assicurati che tutte le variabili necessarie siano definite nel file .env
o direttamente in compose.yaml
.
version: '3.8'
services:
app:
image: myapp:latest
environment:
- APP_ENV=development
- DEBUG=true
9.3 Esempi di comandi per il debugging
Esempi di utilizzo dei comandi per il debugging
Esempio 1: Verifica e correzione dell'errore di connessione al database
Visualizzazione dei log del servizio web
:
docker compose logs web
Verifica della connessione di rete tra web
e db
:
docker compose exec web ping db
docker compose exec web curl http://db:5432
Connessione al contenitore web
per la diagnostica:
docker compose exec web /bin/bash
Esempio 2: Verifica dei problemi con i volumi
Verifica del montaggio dei volumi:
version: '3.8'
services:
db:
image: postgres:latest
volumes:
- db-data:/var/lib/postgresql/data
volumes:
db-data:
Connessione al contenitore db
e verifica dei dati:
docker compose exec db /bin/bash
ls -l /var/lib/postgresql/data
GO TO FULL VERSION