MongoDB安装在Ubuntu 14.04 docker容器中失败

我想在docker容器中的ubuntu 14.04上安装mongodb,在我的Dockerfile中使用官方mongodb指南中的以下步骤:

RUN sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 7F0CEB10 RUN echo "deb http://repo.mongodb.org/apt/ubuntu "$(lsb_release -sc)"/mongodb-org/3.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.0.list RUN apt-get update && apt-get -q -y install \ nodejs\ npm \ git \ mongodb-org 

这些命令在我的主机ubuntu系统上正确安装mongodb,但不是在docker中。 在我的docker镜像中,/etc/init.d/mongod不存在。 运行“docker build”时会打印以下错误:

 invoke-rc.d: unknown initscript, /etc/init.d/mongod not found. invoke-rc.d: policy-rc.d denied execution of start. 

ref: 堆栈溢出

如上所述,原因是你试图安装一个为Upstart init服务打包的版本,但是ubuntu 14.04默认仍然使用SysV init。 推荐的方法是从这里使用更高版本的3.2.x,或者如果你严格的版本,修补程序是使用

 deb http://downloads-distro.mongodb.org/repo/debian-sysvinit dist 10gen 

代替

 deb http://repo.mongodb.org/apt/ubuntu "$(lsb_release -sc)"/mongodb-org/3.0 multiverse 

另外,为了在启动docker run -d的时候运行 mongod,你需要添加一个CMD。 所以,我修改并编译了一个docker文件来testing它,看起来像这样:

 FROM ubuntu:14.04 RUN sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 7F0CEB10 \ && echo "deb http://downloads-distro.mongodb.org/repo/debian-sysvinit dist 10gen" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.0.list \ && apt-get update && apt-get -q -y install \ nodejs\ npm \ git \ mongodb-org CMD ["mongod", "--dbpath", "."] 

请注意,我没有使用init来启动容器,因为init脚本将mongod放在后台(除了许多其他的东西)。 对于docker集装箱连续运行,CMD脚本应该在前台。

/etc/init.d/mongod start()中的剪辑请注意–background

  # Start the process using the wrapper start-stop-daemon --background --start --quiet --pidfile $PIDFILE \ --make-pidfile --chuid $DAEMONUSER \ --exec $NUMACTL $DAEMON $DAEMON_OPTS