Este proyecto genera automáticamente una API REST completa (CRUD) y documentación Swagger basándose en el esquema de una base de datos MariaDB existente.
/api-docs.El contenedor se configura mediante las siguientes variables de entorno:
| Variable | Descripción | Valor por defecto |
|---|---|---|
DB_HOST | Host de la base de datos | localhost |
DB_PORT | Puerto de la base de datos | 3306 |
DB_USER | Usuario de la base de datos | root |
DB_PASSWORD | Contraseña del usuario | password |
DB_NAME | Nombre de la base de datos a exponer | test |
PORT | Puerto de la API | 3000 |
Si ya tienes una base de datos corriendo, puedes ejecutar el contenedor directamente descargando la imagen desde Docker Hub.
| Escenario | Valor de DB_HOST | Comando / Nota |
|---|---|---|
| BBDD en el Host (Linux) | localhost | Usa --network="host" en el comando docker run. |
| BBDD en el Host (Mac/Win) | host.docker.internal | Valor por defecto en Docker Desktop. |
| Otro Contenedor (misma red) | nombre_del_contenedor | Ambos deben estar en la misma red de Docker. |
| Servidor Remoto (IP) | 192.168.1.XX | Asegúrate que la BBDD permite conexiones externas. |
localhost a secas?Esta es la duda más común. Dentro de un contenedor, localhost se refiere al propio contenedor, no a tu ordenador.
Si tu base de datos está instalada "en el Windows/Linux/Mac" (fuera de Docker) y pones DB_HOST=localhost, la API buscará la base de datos dentro de su propio contenedor y no la encontrará.
¿Cómo solucionarlo?
host.docker.internal. Docker mapea esto automáticamente a tu máquina real.--network="host" al arrancar el contenedor. Esto hace que el contenedor comparta la red con tu máquina y entonces sí funciona localhost.192.168.1.X).DB_HOST=mi-mariadb-container). Para esto, ambos deben estar en la misma red de Docker (docker network connect).docker run -d \
--name mariadb-api \
-p 3000:3000 \
-e DB_HOST=192.168.1.50 \
-e DB_USER=root \
-e DB_PASSWORD=tu_password \
-e DB_NAME=tu_base_de_datos \
bernat13/mariadb2apirest:latest
Una vez arrancado:
http://localhost:3000/{nombre_tabla}Una de las joyas de este proyecto es que genera automáticamente una interfaz de Swagger UI.
http://localhost:3000/api-docs.Imagina que tu base de datos MariaDB tiene las siguientes tablas: productos, clientes y pedidos. La API generará automáticamente estas rutas para ti:
GET /productos: Lista todos los productos disponibles.POST /productos: Registra un nuevo producto.GET /productos/5: Obtiene el detalle del producto con ID 5.PUT /productos/5: Actualiza el precio o stock del producto 5.DELETE /productos/5: Elimina el producto 5.Si quieres obtener todos los productos de tu tienda desde la terminal:
curl -X GET http://localhost:3000/productos
Para añadir un nuevo producto enviando un JSON al endpoint:
curl -X POST http://localhost:3000/productos \
-H "Content-Type: application/json" \
-d '{"nombre": "Teclado Mecánico", "precio": 89.99, "stock": 15}'
Note
**Detección de Tablas**: Recuerda que la API escanea la base de datos **al iniciar**. Si creas tablas nuevas mientras el contenedor está corriendo, deberás reiniciarlo con `docker restart dynamic-api` para que aparezcan en Swagger y en las rutas.
Esta es la forma recomendada para mantener tu stack organizado. En este modo la API se conecta a una base de datos que ya tienes funcionando.
Tip
**Retry Logic**: La API ahora incluye una lógica de reintento. Si la base de datos no está lista inmediatamente, reintentará la conexión cada 5 segundos hasta 5 veces antes de fallar.
Crea un archivo docker-compose.yml:
version: '3.8'
services:
api:
image: bernat13/mariadb2apirest:latest
container_name: dynamic-api
restart: always
ports:
- "3000:3000"
environment:
DB_HOST: host.docker.internal # O la IP de tu base de datos
DB_PORT: 3306
DB_USER: root
DB_PASSWORD: rootpassword
DB_NAME: mydatabase
PORT: 3000
docker-compose up -d
localhost:3306, user: root, pass: rootpassword).USE mydatabase;
CREATE TABLE usuarios (
id INT AUTO_INCREMENT PRIMARY KEY,
nombre VARCHAR(50),
email VARCHAR(50)
);
INSERT INTO usuarios (nombre, email) VALUES ('Juan', '[email protected]');
docker restart dynamic-api
mariadb_containerSegún tu configuración actual, para conectar la API a tu contenedor MariaDB ya existente:
docker-compose.yml tiene la red mariadb_default marcada como externa:
networks:
mariadb_default:
external: true
DB_HOST=mariadb_container y la contraseña 54321Ba##.docker-compose up -d
Content type
Image
Digest
sha256:53d14d722…
Size
63.8 MB
Last updated
7 months ago
docker pull bernat13/mariadb2apirest:main