【问题标题】:Dockerize MongoDB v3.4 on Raspberry Pi?在 Raspberry Pi 上 Dockerize MongoDB v3.4?
【发布时间】:2018-07-12 03:06:08
【问题描述】:
I have this problem。似乎 MongoDB v3.4 不能安装在 32 位系统上,所以不能安装在我运行 Raspbian 的树莓上。
我尝试使用 Docker 运行 64 位映像(可能吗?)。但是当我尝试拉取官方的 mongo docker repo 时:https://hub.docker.com/_/mongo/。
它说清单列表条目中没有与 linux/arm 匹配的清单。
我还尝试拉自定义 rpi-mongodb 图像,但它们都运行 2.4 版本的 MongoDB...而且我的服务器无法使用此版本运行
如何在 Raspberry Pi 上运行 MongoDB v3.4?
【问题讨论】:
标签:
node.js
mongodb
docker
raspberry-pi
docker-image
【解决方案1】:
如果旧版本没问题(2.4.10)...
将此 git 存储库克隆到本地树莓派上(首先安装 git),然后按照网页上的自述文件运行 docker build 以创建 docker 映像,然后从该映像创建/启动/运行 docker 容器:
Git repository for mongodb Dockerfile
一旦构建了镜像并从中启动了一个容器,您应该能够直接登录到 mongodb 容器并与 mongo 客户端交互以发出与数据库对话的命令,例如:
docker exec -i -t yourMongodbContainerName /bin/bash
唯一发现的问题涉及停止容器,该容器失败。 Docker 在超时后杀死容器(更长的超时相同的交易)。这种“不干净的关闭”意味着容器的重新启动失败,因为 mongodb 抱怨锁定文件处于错误状态。您可以在日志中看到这一点:
docker logs yourMongodbContainerName
故障可以通过 1. 确保在此之前没有应用程序访问数据库 2. 停止 mongodb 容器然后 3. 删除 /data/db/ 容器中的锁定文件(通常使用 -v 映射到 docker 主机,因为容器是显然是暂时的)最后 4. 重新启动 mongodb 容器作为重新部署的一部分。
mongodb的版本是2.4.10。我通过 nodejs 连接,npm 的 2.2.35 客户端驱动程序是我发现的最新版本。
【解决方案2】:
由于 Raspberry Pi 的架构是 ARM,因此只有为 ARM 架构构建的映像才能在 RPI 上使用。而且这些 ARM 映像的数量非常少。
唯一的选择就是自己建立一个新的形象。问题是我们不能通过常规方式(Dockerfile:FROM another-than-ARM-arch-img)并在我们 PC 的拱形机器上构建。主要技巧是使用 CI 服务器(例如 Travis)来构建您的 Dockerfile(我们必须在构建代理中注册 QEMU)。
我已经成功为基于this tutorial 的RPI 构建了OpenMediaVault docker image。
想法是
- 寻找 Dockerfile of MongoDB 3.4 并将其内容调整到我们的 Dockerfile。
-
创建我们的 Dockerfile 来为 RPI 构建 ARM 映像。
FROM resin/rpi-raspbian # Since resin is providing some useful arm arch images
# Your adapted content from
# MongoDB 3.4 Dockerfile
# ....
按照上述tutorial 中的描述创建.travis.yml。
- 转到您最喜欢的 CI 服务并将您的 git 存储库链接到它。
- 让 CI 构建,并将镜像推送到 docker hub
- 将图像从 docker hub 拉到您的 RPI。
另一种解决方案
是从 Resin.io 构建 docker 镜像。这个解决方案的一个缺点是我们不能将构建的镜像推送到 docker hub 并将其拉到其他任何地方。我只是让你doc here,因为它会让我的回答变得如此冗长。