【问题标题】: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

      想法是

      1. 寻找 Dockerfile of MongoDB 3.4 并将其内容调整到我们的 Dockerfile。
      2. 创建我们的 Dockerfile 来为 RPI 构建 ARM 映像。

        FROM resin/rpi-raspbian # Since resin is providing some useful arm arch images
        
        # Your adapted content from 
        # MongoDB 3.4 Dockerfile
        # ....
        
      3. 按照上述tutorial 中的描述创建.travis.yml

      4. 转到您最喜欢的 CI 服务并将您的 git 存储库链接到它。
      5. 让 CI 构建,并将镜像推送到 docker hub
      6. 将图像从 docker hub 拉到您的 RPI。

      另一种解决方案

      是从 Resin.io 构建 docker 镜像。这个解决方案的一个缺点是我们不能将构建的镜像推送到 docker hub 并将其拉到其他任何地方。我只是让你doc here,因为它会让我的回答变得如此冗长。

      【讨论】:

        猜你喜欢
        • 2020-01-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多