Резервное копирование и дамп в докер-контейнере neo4j-communityPython

Программы на Python
Ответить
Anonymous
 Резервное копирование и дамп в докер-контейнере neo4j-community

Сообщение Anonymous »

Мне нужно создать приложение, которое работает на Python (streamlit), взаимодействует с базой данных neo4j и позволяет пользователю изменять и создавать резервные копии базы данных neo4j в интерактивном режиме. Затем мне нужно развернуть это приложение с помощью Docker. Моя идея заключалась в том, чтобы использовать docker Compose и иметь один контейнер с базой данных neo4j и один с приложениемstreamlit и закрепить все это в docker.
Теперь проблема в том, что версия сообщества neo4j заставляет вас завершать работу экземпляра neo4j для выполнения любой резервной копии/загрузки базы данных. Резервное копирование обычно делается так:

Код: Выделить всё

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
Кроме того, докер-контейнер из официального приложения neo4j умирает, если вы пытаетесь завершить процесс neo4j, работающий в контейнере.
Это проблема, потому что мне нужен способ сохранить докер-контейнер neo4j в рабочем состоянии, но убить neo4j, чтобы из ВНУТРИ контейнера я мог затем каким-то образом запустить:

Код: Выделить всё

neo4j stop
neo4j-admin dump --database=neo4j --to=/backups/backup_test.dump
neo4j start
С этой целью я попытался создать собственный образ neo4j с другой точкой входа, чтобы он не угасал, когда я завершаю процесс neo4j. Я сделал это с помощью этого Dockerfile:

Код: Выделить всё

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"]
и где находится docker_entrypoint.sh:

Код: Выделить всё

#!/bin/sh
/var/lib/neo4j/bin/neo4j console &
echo "still working"
tail -f /dev/null
Теперь образ строится правильно, и если вы docker exec в neo4j работает правильно, его можно остановить и перезапустить, но теперь по какой-то причине я не могу подключиться к контейнеру, как обычно, либо через браузер по адресу http://localhost:7474/browser/, либо через драйвер python neo4j. Если я попытаюсь подключить выходы драйвера Python:

Код: Выделить всё

Couldn't connect to localhost:7687 (resolved to ('127.0.0.1:7687',)):
Connection to 127.0.0.1:7687 closed without handshake response
Что я делаю не так?
РЕДАКТИРОВАТЬ: я создаю контейнер докера с помощью следующей команды:

Код: Выделить всё

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
Эта же команда работает нормально, если я использую neo4j:latest вместо my_neo4j_docker_image_id.

Подробнее здесь: https://stackoverflow.com/questions/724 ... -container
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»