CodeGym /Corsi /Docker SELF /Debug delle applicazioni in Docker Compose

Debug delle applicazioni in Docker Compose

Docker SELF
Livello 16 , Lezione 3
Disponibile

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:

  1. Problemi con l'avvio dei container:
    • Controllo dei log dei container.
    • Controllo dello stato dei container.
    • Controllo dei file di configurazione.
  2. Problemi di rete:
    • Controllo delle connessioni di rete.
    • Utilizzo di strumenti di rete all'interno dei container.
  3. 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.

Terminale

docker compose logs

Puoi specificare un servizio specifico per visualizzare i suoi log:

Terminale

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.

Terminale

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:

Terminale

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.

Terminale

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.

Terminale

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:

Terminal

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.

Yaml

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.

Yaml

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:

Terminal

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:

Terminal

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.

Terminal

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.

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:

Terminal

docker compose logs web

Verifica della connessione di rete tra web e db:

Terminal

docker compose exec web ping db
docker compose exec web curl http://db:5432

Connessione al contenitore web per la diagnostica:

Terminal

docker compose exec web /bin/bash

Esempio 2: Verifica dei problemi con i volumi

Verifica del montaggio dei volumi:

Yaml

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:

Terminal

docker compose exec db /bin/bash
ls -l /var/lib/postgresql/data
1
Опрос
Scalabilità dei servizi,  16 уровень,  3 лекция
недоступен
Scalabilità dei servizi
Scalabilità dei servizi
Commenti
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION