Backup und Dump im neo4j-comunity Docker-ContainerPython

Python-Programme
Anonymous
 Backup und Dump im neo4j-comunity Docker-Container

Post by Anonymous »

Ich muss eine App erstellen, die in Python (Streamlit) läuft, mit einer neo4j-Datenbank kommuniziert und es dem Benutzer ermöglicht, die neo4j-Datenbank interaktiv zu ändern und zu sichern. Dann muss ich diese App mit Docker bereitstellen. Meine Idee war, Docker Compose zu verwenden und einen Container mit der neo4j-Datenbank und einen mit der Streamlit-App zu haben und das Ganze zu dockerisieren.
Das Problem besteht nun darin, dass die neo4j Community Edition Sie dazu zwingt, die neo4j-Instanz herunterzufahren, um Backups/Datenbankladungen durchzuführen. Die Sicherung erfolgt normalerweise wie folgt:

Code: Select all

docker stop dockerid
docker run --interactive --tty --rm --volume=local_path_to/data:/data --volume=/local_path_to/backup_databases:/backups neo4j/neo4j-admin:latest neo4j-admin dump --database=neo4j --to=/backups/backup_test.dump
docker start dockerid
Außerdem stirbt der Docker-Container aus der offiziellen neo4j-App ab, wenn Sie versuchen, den neo4j-Prozess, der im Container läuft, herunterzufahren.
Das ist ein Problem, weil ich eine Möglichkeit brauche, den neo4j-Docker-Container am Leben zu halten, aber neo4j zu töten, damit ich INNERHALB des Containers auf irgendeine Weise starten kann:

Code: Select all

neo4j stop
neo4j-admin dump --database=neo4j --to=/backups/backup_test.dump
neo4j start
Zu diesem Zweck habe ich versucht, ein benutzerdefiniertes neo4j-Image mit einem anderen Einstiegspunkt zu erstellen, damit es nicht abstürzt, wenn ich den neo4j-Prozess abbreche. Ich habe es mit dieser Docker-Datei gemacht:

Code: Select all

FROM neo4j:latest

#Ports that will be exposed
EXPOSE 7473 7474 7687

#environment variables
ENV NEO4J_dbms_security_procedures_unrestricted=algo.*,apoc.*,gds.*
ENV NEO4J_AUTH=neo4j/password

COPY ./docker_entrypoint.sh /usr/local/bin/

RUN chown root:root /usr/local/bin/docker_entrypoint.sh && \
chmod 777 /usr/local/bin/docker_entrypoint.sh

ENTRYPOINT [ "/usr/local/bin/docker_entrypoint.sh" ]

CMD ["neo4j"]
und wo docker_entrypoint.sh ist:

Code: Select all

#!/bin/sh
/var/lib/neo4j/bin/neo4j console &
echo "still working"
tail -f /dev/null
Jetzt wird das Image korrekt erstellt, und wenn Sie Docker Exec in neo4j verwenden, läuft es ordnungsgemäß und kann gestoppt und erneut ausgeführt werden, aber jetzt kann ich aus irgendeinem Grund scheinbar keine Verbindung zum Container herstellen, wie ich es normalerweise tue, weder über den Browser unter http://localhost:7474/browser/ noch über den neo4j-Python-Treiber. Wenn ich versuche, die Python-Treiberausgänge zu verbinden:

Code: Select all

Couldn't connect to localhost:7687 (resolved to ('127.0.0.1:7687',)):
Connection to 127.0.0.1:7687 closed without handshake response
Was mache ich falsch?
BEARBEITEN: Ich erstelle den Docker-Container mit dem folgenden Befehl:

Code: Select all

docker run \
-p7474:7474 -p7687:7687 \
-d \
-v $HOME/neo4j/data/local_data:/data \
-v $HOME/neo4j/logs:/logs \
-v $HOME/neo4j/import:/var/lib/neo4j/import \
-v $HOME/neo4j/plugins:/plugins \
--env NEO4J_dbms_connector_https_advertised__address="localhost:7473" \
--env NEO4J_dbms_connector_http_advertised__address="localhost:7474" \
--env NEO4J_dbms_connector_bolt_advertised__address="localhost:7687" \
--env NEO4J_dbms_security_procedures_unrestricted=algo.*,apoc.*,gds.* \
--env NEO4J_AUTH=neo4j/$PASSWORD \
my_neo4j_docker_image_id
Derselbe Befehl funktioniert einwandfrei, wenn ich neo4j:latest anstelle von my_neo4j_docker_image_id verwende.

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post