我正在尝试在 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.
答案1
參考文獻:堆栈溢出
如上所述,原因是您尝试安装为 Upstart init 服务打包的版本,但 ubuntu 14.04 仍然默认使用 SysV init。建议的方法是使用来自这里或者如果你对版本要求严格,解决方法是使用
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
另外,要在启动时让 mongod 运行docker 运行-d,你需要添加一个 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 the process using the wrapper
start-stop-daemon --background --start --quiet --pidfile $PIDFILE \
--make-pidfile --chuid $DAEMONUSER \
--exec $NUMACTL $DAEMON $DAEMON_OPTS