Bagaimana anda melakukan dump database Neo4j dalam wadah Docker?

Wadah docker untuk Neo4j dimulai sebagai per dokumentasi dan bekerja dengan baik menggunakan perintah berikut:

$ docker run \    --detach \    --publish=7474:7474 \    --publish=7473:7473 \    --publish=7687:7687 \    --volume=$HOME/neo4j/data:/data \    --volume=$HOME/neo4j/logs:/logs \    --volume=$HOME/neo4j/ssl:/ssl \    --ulimit=nofile=40000:40000 \    --name=myname-neo4j \    neo4j:3.1.1

Ketika saya mencoba untuk melakukan neo4j-admin dump dari database Saya mendapatkan kesalahan:

$ docker exec -ti myname-neo4j bin/neo4j-admin dump --database=graph.db --to=/home/name/myname.dumpcommand failed: the database is in use -- stop Neo4j and try again

Namun, jika proses Neo4j dihentikan, yang tampaknya menjadi satu-satunya cara untuk membebaskan database, wadah ditutup. Ini tampaknya merupakan perilaku yang diharapkan dari Docker. Oleh karena itu, tampaknya tidak mungkin untuk menelepon neo4j-admin dump dari dalam wadah tanpa database sedang digunakan.

Bagaimana ini bisa diselesaikan saat masih menggunakan Docker?

1: menghentikan wadah.

docker stop myname-neo4j

2: lepaskan wadah

docker rm myname-neo4j

3: Jalankan wadah sebagai mode interaktif (- it) tanpa opsi (lepaskan) dan jalankan shell ( /bin/bash).

docker run \--publish=7474:7474 \--publish=7473:7473 \--publish=7687:7687 \--volume=$HOME/neo4j/data:/data \--volume=$HOME/neo4j/logs:/logs \--volume=$HOME/neo4j/ssl:/ssl \--ulimit=nofile=40000:40000 \--name=myname-neo4j \-it \neo4j:3.1.1 \-c /bin/bash

Sekarang anda berada di dalam wadah neo4j tanpa menjalankan Neo.

4: Periksa bahwa neo tidak naik dengan mengunjungi titik akhir URI di (http://yourhost:7474). Anda akan melihat pesan" tidak dapat terhubung".

5: Dump database Anda

docker exec -ti myname-neo4j bin/neo4j-admin dump --database=graph.db --to=/home/name/myname.dump

Saya melakukan ini:

docker stop [neo4j container]    docker run --name dump --entrypoint="/bin/bash" -it -v $HOME/neo4j/data:/data neo4j:3.1.1 -c "neo4j-admin dump --to=/data/db.dump"    docker start [neo4j container]

Kemudian Anda dapat menyimpan wadah"dump & quot; dan menggunakannya kembali, atau hanya menghapusnya. Konsep yang sama dengan parameter entrypoint dan-c akan berlaku untuk prosedur pemuatan.

Secara kebetulan sekarang jauh lebih mudah untuk melakukan ini di Neo4j 4.0 karena Anda dapat menghentikan dan memulai database tanpa harus mematikan seluruh wadah Docker.

Jadi jika kita ingin mengambil dump database yang disebut 'foo', kita akan melakukan hal berikut:

STOP DATABASE foodocker exec -it our-neo4j-container neo4j-admin dump --database=foo --to=/tmp/foo.db.dumpdocker cp our-neo4j-container:/tmp/foo.db.dump .START DATABASE foo

Juga ditulis sebagai posting blog - https://markhneedham.com/blog/2020/01/28/neo4j-database-dump-docker-container/

Saya memiliki masalah yang sama sebelumnya, jadi saya menulis solusi ini untuk membuang data neo4j dan menariknya ke luar wadah ke mesin host.

docker rm --force neo4j-dumpdocker run \--name neo4j-dump \--env-file /storage/bin/.neo4j.env \--mount type=bind,source=<neo4j_data_folder>,target=/data \neo4j:3.1.1 bin/neo4j-admin dump --database=graph.db --to=/graph.db.dumpdocker cp `docker ps -aqf "name=neo4j-dump"`:/graph.db.dump <target_dump_file>docker rm --force neo4j-dump

Ini akan membuat penampung baru dan membuang data alih - alih memulai layanan neo4j, lalu salin dump ke host,cukup perbarui dan ke milik Anda