如何使用 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实现ISO文件转化为完整版Centos镜像,并搭建集群数据仓库
使用Dockerfile创建带编译安装znginx服务的Centos Docker镜像
系列6使用Dockerfile创建带LAMP的Centos Docker镜像