Docker: PostgreSQL + pgAdmin
Entorn de desenvolupament local amb PostgreSQL 17 i pgAdmin 4 orquestrats amb Docker Compose. pgAdmin s'obre directament al port 8888 sense pantalla d'inici de sessió (mode escriptori).
Estructura de fitxers
Crea un directori de treball i col·loca-hi els dos fitxers següents:
docker-compose.yml
services:
postgres:
image: postgres:18
container_name: postgres-gbd
environment:
POSTGRES_USER: postgres
POSTGRES_PASSWORD: postgres
POSTGRES_DB: gbd
volumes:
- postgres_data:/var/lib/postgresql
networks:
- gbd_net
healthcheck:
test: ["CMD-SHELL", "pg_isready -U postgres"]
interval: 10s
timeout: 5s
retries: 5
restart: unless-stopped
pgadmin:
image: dpage/pgadmin4:latest
container_name: pgadmin-gbd
environment:
PGADMIN_DEFAULT_EMAIL: admin@gbd.cat
PGADMIN_DEFAULT_PASSWORD: admin
PGADMIN_CONFIG_SERVER_MODE: "False"
PGADMIN_CONFIG_MASTER_PASSWORD_REQUIRED: "False"
volumes:
- pgadmin_data:/var/lib/pgadmin
- ./servers.json:/pgadmin4/servers.json:ro
ports:
- "8888:80"
networks:
- gbd_net
depends_on:
postgres:
condition: service_healthy
restart: unless-stopped
volumes:
postgres_data:
pgadmin_data:
networks:
gbd_net:
servers.json
Configura automàticament la connexió al servidor PostgreSQL quan pgAdmin arrenca per primera vegada:
{
"Servers": {
"1": {
"Name": "PostgreSQL GBD local",
"Group": "Servers",
"Host": "postgres",
"Port": 5432,
"MaintenanceDB": "gbd",
"Username": "postgres",
"SSLMode": "prefer"
}
}
}
Nom d'host intern
El camp Host conté postgres (no localhost), que és el nom del servei dins la xarxa interna Docker gbd_net. Des de fora del contenidor (per exemple des de psql al terminal de l'alumne), l'host és localhost.
Posada en marxa
# Aixeca tots els serveis en segon pla
docker compose up -d
# Comprova que tots dos contenidors estan en marxa
docker compose ps
# Mostra els logs en temps real
docker compose logs -f
Espera uns 15-20 segons fins que el healthcheck de PostgreSQL passi i pgAdmin arrenqui. Aleshores obre el navegador a:
pgAdmin s'obre directament (sense pantalla de login) i mostra el servidor PostgreSQL GBD local al panell esquerre. En expandir-lo per primera vegada, demanarà la contrasenya del servidor: introdueix postgres.
Credencials
| Servei | Camp | Valor |
|---|---|---|
| PostgreSQL | Usuari | postgres |
| PostgreSQL | Contrasenya | postgres |
| PostgreSQL | Base de dades | gbd |
| PostgreSQL | Port (host) | 5432 |
| pgAdmin | URL | http://localhost:8888 |
| pgAdmin | Mode | Escriptori (sense login) |
Entorn de desenvolupament
Aquestes credencials sont adequades per a un entorn local de pràctiques. No les facis servir en producció ni en màquines accessibles des de xarxes externes.
Connexió des del terminal
Per connectar-se directament amb psql des del terminal del host:
# Amb psql instal·lat localment
psql -h localhost -p 5432 -U postgres -d gbd
# Sense psql local: executa psql dins el contenidor
docker exec -it postgres-gbd psql -U postgres -d gbd
Gestió del cicle de vida
# Atura els contenidors (conserva les dades)
docker compose stop
# Torna a engegar-los
docker compose start
# Atura i elimina els contenidors (les dades persisteixen als volums)
docker compose down
# Elimina també els volums (esborra totes les dades)
docker compose down -v
Persistència de dades
Les dades de PostgreSQL es guarden al volum Docker postgres_data i sobreviuen a docker compose down. Només docker compose down -v les esborra. La configuració de pgAdmin (connexions guardades, consultes, etc.) es guarda al volum pgadmin_data.