Ubuntu-14.04

Ubuntu 14.04 docker 容器中的 Mongodb 安裝失敗

  • January 4, 2016

我正在嘗試在 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.

參考:堆棧溢出

如上所述,原因是您嘗試安裝為 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 文件來測試它,看起來像這樣:

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

引用自:https://serverfault.com/questions/746348