Neo4J en docker

NoSQL Neo4J Docker HomeLab

“Cómo desplegar Neo4j localmente con Docker en modo desarrollo y con Docker Compose.”

José R Sosa https://josersosa.github.io/personalweb/
09-08-2025

Requisitos previos

Tener instalado Docker (y opcionalmente Docker Compose).
Verifica:

docker --version
docker compose version   # (o `docker-compose --version` en instalaciones antiguas)

Opción rápida

Usando docker run (un solo contenedor)

  1. Creamos los volúmenes para persistir los datos
docker volume create neo4j_data 
docker volume create neo4j_data_import  
docker volume create neo4j_data_plugins
  1. Levanta Neo4j (ejemplo usando la etiqueta latest; cambia a la versión que prefieras):
docker run -d \
  --name neo4j \ 
  --network homelab \
  -p 7474:7474 \
  -p 7687:7687 \
  -v data_neo4j:/data \
  -v data_neo4j_import:/var/lib/neo4j/import \
  -v data_neo4j_plugins:/plugins \
  -e NEO4J_AUTH=neo4j/miPasswordSeguro \
  -e NEO4J_server_memory_heap_initial__size=4G \
  -e NEO4J_server_memory_heap_max__size=8 \
  neo4j:latest
docker run -d --name neo4j --network homelab -p 7474:7474 -p 7687:7687 -v data_neo4j:/data -v data_neo4j_import:/var/lib/neo4j/import -v data_neo4j_plugins:/plugins -e NEO4J_AUTH=neo4j/kukenan6152 -e NEO4J_server_memory_heap_initial__size=4G -e NEO4J_server_memory_heap_max__size=8G neo4j:latest
  1. Revisa logs y estado:
docker logs -f neo4j
docker ps -a | grep neo4j
  1. Abre el navegador en http://localhost:7474 y conecta con:

O con cypher-shell dentro del contenedor:

docker exec -it neo4j bin/cypher-shell -u neo4j -p miPasswordSeguro
# luego, por ejemplo:
CREATE (:Person {name: 'Alice', age: 30});
MATCH (n) RETURN n LIMIT 25;

Opción recomendada

Usando docker-compose.yml (más organizada).

  1. Crea docker-compose.yml en ~/neo4j:
version: "3.8"
services:
  neo4j:
    image: neo4j:latest
    container_name: neo4j
    ports:
      - "7474:7474"
      - "7687:7687"
    volumes:
      - ./data:/data
      - ./import:/var/lib/neo4j/import
      - ./plugins:/plugins
    environment:
      - NEO4J_AUTH=neo4j/miPasswordSeguro
      - NEO4J_dbms_memory_heap_max_size=1G
      - NEO4J_dbms_memory_pagecache_size=512M
      # - NEO4JLABS_PLUGINS=["apoc"]   # si quieres habilitar APOC (ver nota)
    restart: unless-stopped
  1. Levanta:
docker compose up -d
# o (si tu docker-compose es la binaria antigua)
# docker-compose up -d
  1. Ver logs:
docker compose logs -f neo4j

Importar datos

Ejemplo con CSV. Coloca clientes.csv en ~/neo4j/import/clientes.csv y en cypher-shell:

LOAD CSV WITH HEADERS FROM 'file:///clientes.csv' AS row
CREATE (:Cliente {id: row.id, nombre: row.nombre});

Gestión de usuarios y roles

Crear un nuevo usuario - Desde la interfaz web Entra a http://localhost:7474 con tu usuario neo4j. - Ejecuta en Cypher:

CREATE USER appuser SET PASSWORD 'AppUser123!' CHANGE NOT REQUIRED;
GRANT ROLE reader TO appuser;
GRANT ROLE admin TO appuser;
docker exec -it neo4j bin/cypher-shell -u neo4j -p miPasswordSeguro
CREATE USER appuser SET PASSWORD 'AppUser123!' CHANGE NOT REQUIRED;
GRANT ROLE admin TO appuser;

Listar usuarios:

SHOW USERS;

Cambiar contraseña de un usuario:

ALTER USER appuser SET PASSWORD 'NuevaClaveSegura!';

Eliminar usuario:

DROP USER appuser;

Conexión desde otros sistemas

Ejemplo con Python (neo4j driver oficial):

from neo4j import GraphDatabase

uri = "bolt://localhost:7687"
driver = GraphDatabase.driver(uri, auth=("appuser", "AppUser123!"))

with driver.session() as session:
    result = session.run("MATCH (n) RETURN count(n) AS total")
    for record in result:
        print(record["total"])

Ejemplo desde línea de comandos con cypher-shell:

cypher-shell -u appuser -p AppUser123! -a bolt://localhost:7687

Habilitar APOC / GDS / plugins

Nota: la forma exacta de instalar plugins puede variar según la versión de Neo4j. Si planeas plugins serios, revisa la versión del plugin compatible con tu imagen.

Ajustes de memoria y rendimiento (dev vs prod)

Seguridad y redes

Problemas comunes y soluciones rápidas

sudo chown -R 7474:7474 ./data ./import ./plugins   # el usuario neo4j del contenedor suele usar UID 7474
(Si no funciona, inspecciona los logs del contenedor para identificar el UID exacto).

Parar / remover contenedor y datos

docker compose down
# o
docker stop neo4j
docker rm neo4j

# si usaste volúmenes bind-mount (./data) borra la carpeta local:
rm -rf ./data ./import ./plugins

# si usas volumentes de docker
docker volume rm neo4j_data neo4j_data_import neo4j_data_plugins

Corrections

If you see mistakes or want to suggest changes, please create an issue on the source repository.

Citation

For attribution, please cite this work as

Sosa (2025, Sept. 8). Blog de José R Sosa: Neo4J en docker. Retrieved from https://josersosa.github.io/personalweb/posts/2026-02-01-neo4j-en-docker/

BibTeX citation

@misc{sosa2025neo4j,
  author = {Sosa, José R},
  title = {Blog de José R Sosa: Neo4J en docker},
  url = {https://josersosa.github.io/personalweb/posts/2026-02-01-neo4j-en-docker/},
  year = {2025}
}