如何使用 dockerfile 在 centos docker 容器中安装 mongodb-org-tools?

Posted

技术标签:

【中文标题】如何使用 dockerfile 在 centos docker 容器中安装 mongodb-org-tools?【英文标题】:how to install mongo-org-tools in centos docker container using dockerfile? 【发布时间】:2019-02-16 14:52:56 【问题描述】:

我想在容器中安装 mongo-org-tools,因为我想在容器中使用 mongorestore 和 mongodump 等工具。

正如 mongodb 的文档所建议的那样,在 CentOS 所需的 conf 文件夹中添加一个 repo 文件。我尝试使用 dockerfile 执行此操作,但没有执行。

有没有办法通过 dockerfile 做到这一点,还是我做错了什么?

Dockerfile

FROM centos

# Create app directory
WORKDIR /usr/src/app

# RUN adduser -G root node

#ENV http_proxy http://172.26.25.4:8080/
#ENV https_proxy http://172.26.25.4:8080/

# Install app dependencies
# A wildcard is used to ensure both package.json AND package-lock.json are copied
# where available (npm@5+)
COPY package*.json ./
COPY SmallTalkWorkspace*.json ./
COPY bin ./bin
COPY helpers ./helpers
COPY src ./src

ADD ./mongodb-org-4.0.repo /etc/yum.repos.d/

 RUN yum -y update && \
     yum -y install epel-release && \
     yum -y install nodejs npm && \
     yum -y install mongodb-org-shell mongodb-org-tools && \
     yum clean all && \
     mkdir -p /var/lib/mongo && \
     chown -R mongod:mongod /var/lib/mongo

VOLUME ["/var/lib/mongo"]

RUN ["/usr/bin/mongod", "--dbpath", "/var/lib/mongo"]

EXPOSE 5000
# USER node

CMD ["npm", "start"]

mongodb-org-4.0.repo

[mongodb-org-4.0]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/4.0/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-4.0.asc

【问题讨论】:

是的,通过 Dockerfile 实现这一点很常见。你能发布你的 Dockerfile 看看为什么会出现问题吗? @pacuna 我已经添加了 dockerfile 和 mongo repo 文件,它们都存在于我的根目录中。你能告诉我我做错了什么吗? 看看这个link。 【参考方案1】:

你需要做这样的事情:

FROM centos:7.6.1810

WORKDIR /usr/src

RUN curl -sL **rpm nodesource url** | bash - && \
    yum install wget -y && \
    wget **rpm URL** && \
    yum localinstall mongodb-org-tools-4.0.15-1.el7.x86_64.rpm -y

【讨论】:

【参考方案2】:

您还需要安装 mongodb-org 包来创建用户。

【讨论】:

我也试过了,它崩溃了。这是正确的实现吗? 我运行了相同的 dockerfile,但也添加了该包,一切顺利。在此之前我有一个 mongod 用户错误。虽然我当然没有测试可能导致崩溃的节点应用程序。 但是如果你看到了,我希望 mongo 和我的节点应用程序都运行,但是当 "RUN ["/usr/bin/mongod", "--dbpath", "/var/lib/mongo "]" 命令被执行,它不会向前移动。我希望我在端口 5000 上运行的应用程序也能运行。 哦,我明白你在说什么。这就是为什么通常你想使用像 docker compose 这样的东西来为不同的进程提供单独的容器。最好的解决方案是在自己的容器中运行 mongo,在另一个容器中运行您的应用程序。然后您的容器可以通过服务名称相互通信。

以上是关于如何使用 dockerfile 在 centos docker 容器中安装 mongodb-org-tools?的主要内容,如果未能解决你的问题,请参考以下文章

Docker Dockerfile详解

在Docker中使用Dockerfile实现ISO文件转化为完整版Centos镜像,并搭建集群数据仓库

使用Dockerfile创建带编译安装znginx服务的Centos Docker镜像

系列6使用Dockerfile创建带LAMP的Centos Docker镜像

使用Dockerfile创建带Apache服务的Centos Docker镜像

使用Dockerfile创建带Apache服务的Centos Docker镜像1