linux - 在 Dockerfile 中导入 ArangoDB-Dump

标签 linux docker arangodb

我想基于官方的 ArangoDB 镜像构建一个 Docker 镜像。在 Dockerfile 中,我复制并执行了一个 shell 脚本。此脚本下载并解压缩 Arango 转储并使用 arangorestore --input-directory "dump" 导入它。

控制台日志显示,导入已成功完成:

# Connected to ArangoDB 'http+tcp://127.0.0.1:8529'
# Re-creating document collection 'pages'...
# Loading data into document collection 'pages'...
# Re-creating edge collection 'links_bar'...
# Loading data into edge collection 'links_bar'...
Processed 2 collection(s), read 143363388 byte(s) from datafiles, sent 19 batch(es)

但是,当我启动这个图像的容器并转到Arango web 界面时,似乎根本没有数据...

最佳答案

好的,因为位于 var/lib/arangodb3/databases/database-1/ 中的 ArangoDB 数据目录在其官方 Dockerfile 中被声明为 Volume,在我的 Dockerfile 中的每条指令之后,该卷将再次变空。

这个问题的解决方法是覆盖 docker-entrypoint,并在运行时(而不是在构建时)初始化数据库,或者(这是我最喜欢的),只需更改 ArangoDB 的数据目录:

mkdir /arango-data
chmod 777 /arango-data
sed -i.bak 's/^\(directory = \).*/\1\/arango-data/' /etc/arangodb3/arangod.conf

您复制到/arango-data 或导入 ArangoDB 的所有内容都不会被删除,因为它没有被声明为一个卷。

关于linux - 在 Dockerfile 中导入 ArangoDB-Dump,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45031332/

相关文章:

docker - 如何使用Docker Swarm模式在容器之间共享数据?

linux - ntfs 上的 Cygwin rsync 不会硬链接(hard link) (--link-dest) 文件

linux - 无法将命令输出重定向到文件(用于后缀状态)

docker - 如何在一个mesos从节点上运行多个docker容器?

docker - 使用主机中的目录挂载docker镜像目录中存在的文件

django - 使用 Foxx 为 Django 构建 API 或使用 ArangoDB Python 驱动程序?

linux - 将文件 1 中的数据追加/补充到文件 2 (linux)

linux - Jenkins 如何处理交互式 Shell 脚本?

java - driver.CreateGraph 上的 ArangoDB JsonSyntaxException

node.js - 我如何在 Node.js 项目的 Arango 或 Neo4j 中存储和管理数据库模式