升级 Arangodb - 如何在 运行 in Docker 时添加命令行标志?

Upgrade Arangodb - how to add a command line flag when running in Docker?

大约 2 年前,我们在 google 计算引擎上部署了一个 arangodb docker 实例。

它一直运行良好,直到现在才重新启动。 arangodb 已升级,但我无法升级数据库。这是计算引擎日志:

**A 2021-06-14T13:56:39.353155517Z 2021-06-14T13:56:39Z [1] ERROR [3bc7f] {startup} Database directory version (30503) is lower than current version (30711).
A 2021-06-14T13:56:39.353253420Z 2021-06-14T13:56:39Z [1] ERROR [ebca0] {startup} ----------------------------------------------------------------------
A 2021-06-14T13:56:39.353343821Z 2021-06-14T13:56:39Z [1] ERROR [24e3c] {startup} It seems like you have upgraded the ArangoDB binary.
A 2021-06-14T13:56:39.353429097Z 2021-06-14T13:56:39Z [1] ERROR [8bcec] {startup} If this is what you wanted to do, please restart with the
A 2021-06-14T13:56:39.353503511Z 2021-06-14T13:56:39Z [1] ERROR [b0360] {startup}   --database.auto-upgrade true
A 2021-06-14T13:56:39.353588233Z 2021-06-14T13:56:39Z [1] ERROR [13414] {startup} option to upgrade the data in the database directory.
A 2021-06-14T13:56:39.353662855Z 2021-06-14T13:56:39Z [1] ERROR [24bd1] {startup} ----------------------------------------------------------------------'
A 2021-06-14T13:56:39.353744994Z 2021-06-14T13:56:39Z [1] ERROR [1c156] Database 'DATMNG' needs upgrade. Please start the server with --database.auto-upgrade
A 2021-06-14T13:56:39.353875354Z 2021-06-14T13:56:39Z [1] FATAL [2eb08] Database 'DATMNG' upgrade failed (bad parameter). Please inspect the logs from the upgrade procedure and try starting the server again.
A 2021-06-14T13:56:39.503654Z time="2021-06-14T13:56:39.502998769Z" level=info msg="ignoring event" module=libcontainerd namespace=moby topic=/tasks/delete type="*events.TaskDelete" 
A 2021-06-14T13:56:39.504312Z 2021-06-14T13:56:39.503105201Z container die 6ae973a8db5b45cf5057d3f26f9610aa8482c9132d5ff992b06f604a8ac72c22 (exitCode=1, image=aran*godb/arangodb, name=klt-arangodb-votd)* 

我无法在计算引擎的任何地方添加 --database.auto-upgrade true(我在计算引擎的环境变量部分尝试过,但似乎没有成功)。

我可以登录安装了 docker 容器的微服务器,但是容器在启动后几乎立即停止工作,所以我无法 shell 提示进行升级手动。

我可以启动容器:

docker run -ti -u root --entrypoint=sh image_id_or_name -s

但是这里没有保留配置或更改。有什么见解或建议吗?

首先,你需要知道,计算引擎创建的实例映射了哪些卷或路径,它在Advanced container options

在终端中您可以使用 https://github.com/nexdrew/rekcod、运行 以下命令,将 <container> 更改为初始实例 id/name

docker run --rm -i -v /var/run/docker.sock:/var/run/docker.sock nexdrew/rekcod <container>

在输出中你应该得到类似

的东西
docker run --name arangodb --runtime runc -v arangodb--3.7:/var/lib/arangodb3 -v arangodb-apps--3.7:/var/lib/arangodb3-apps -p 8529:8529/tcp --restart no -h 0e989039f8c8 --expose 8529/tcp -e 'ARANGO_NO_AUTH=1' -e 'PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin' -e 'GLIBCXX_FORCE_NEW=1' -d --entrypoint "/entrypoint.sh" arangodb/arangodb:3.7.5 'arangod'

-v 参数是您在 运行 备份和升级时需要添加的参数


在升级之前使用以下命令创建备份,如果您有默认配置,则需要备份/var/lib/arangodb3,根据上一步的输出将<volume>更改为volume/path

docker run --rm -v /tmp:/backup -v <volume>:/var/lib/arangodb3 busybox tar -zcvf /backup/arangodb3.tar.gz /var/lib/arangodb3

将在您的主机上创建数据备份 /tmp/arangodb3.tar.gz,保留它。

如果你需要恢复,你可以运行

docker run --rm -v <volume>:/var/lib/arangodb3 -v /tmp:/backup busybox tar -xzvf /backup/arangodb3.tar.gz var/lib/arangodb3

警告:根据 General Upgrade Information / Upgrade Paths

您需要分多个步骤升级您的 3.5.3

  1. 先到3.5.7
  2. 秒至 3.6.13
  3. 最后到 3.7.11

按照命令升级运行,根据上一步的输出将<volume>更改为volume/path,将<arango-image>更改为目标arangodb映像版本

docker run -v <volume>:/var/lib/arangodb3 <arango-image> arangod --database.auto-upgrade=true

然后在计算引擎中启动arangodb