Docker不会启动MONGODB,并且在启动其他服务时不会出现IPAddress

我已经在serverfault.com上问过这个问题。 我也在这里问,因为我在这两个站点看到不同的问题(看起来他们有不同的数据库)。

我一直在试图从Fedorabuild立一个操作系统映像,但没有成功启动以下内容:

  1. Systemd
  2. SSHD
  3. 的RabbitMQ
  4. MongoDB的

我可以得到前3(Systemd,SSHD和RabbitMQ-Server)的工作。 我也可以让MongoDB在容器中工作。 但是,我无法让MongoDB与其他3个服务一起工作。

另外,当我尝试“dockerize”MongoDB时,IP地址不显示。

我在Dockerfile中丢失了什么?

这是我的dockerfile:

FROM fedora:20 MAINTAINER “Ashfaque” <ashfaque@email.com> ENV container docker RUN yum -y update; yum clean all RUN yum -y install systemd; yum clean all; \ (cd /lib/systemd/system/sysinit.target.wants/; for i in *; do [ $i == systemd-tmpfiles-setup.service ] || rm -f $i; done); \ rm -f /lib/systemd/system/multi-user.target.wants/*;\ rm -f /etc/systemd/system/*.wants/*;\ rm -f /lib/systemd/system/local-fs.target.wants/*; \ rm -f /lib/systemd/system/sockets.target.wants/*udev*; \ rm -f /lib/systemd/system/sockets.target.wants/*initctl*; \ rm -f /lib/systemd/system/basic.target.wants/*;\ rm -f /lib/systemd/system/anaconda.target.wants/*; # Dockerizing SSH - is working RUN yum -y install openssh-server RUN yum -y install openssh-clients RUN mkdir /var/run/sshd RUN systemctl enable sshd.service RUN echo 'root:mypassword' |chpasswd EXPOSE 22 # Dockerizing RabbitMQ - is working RUN yum -y install rabbitmq-server EXPOSE 5672 15672 RUN systemctl enable rabbitmq-server # Dockerizing MongoDB - is NOT WORKING RUN yum -y install mongodb-server RUN yum -y install boost RUN yum -y install scons # Create the MongoDB data directory RUN mkdir -p /data/db /var/log/mongodb /var/run/mongodb RUN sed -i 's/dbpath =\/var\/lib\/mongodb/dbpath =\/data\/db/' /etc/mongodb.conf # Expose port 27017 from the container to the host EXPOSE 27017 # Set usr/bin/mongod as the dockerized entry-point application ENTRYPOINT ["/usr/bin/mongod"] #CMD ["--port", "27017", "--dbpath", "/data/db", "--smallfiles", "--fork", "--syslog"] #RUN /usr/bin/mongod --smallfiles --port 27017 --dbpath /data/db --fork --syslog VOLUME ["/sys/fs/cgroup", "/data/db", "/var/log/mongodb", "/usr/bin"] CMD ["/usr/sbin/init"] 

用于构build的Docker命令是:

(1) docker build -t rabbitmq_mongo_heisenbug .

(2) docker run --privileged -d -e 'container=docker' -v /sys/fs/cgroup:/sys/fs/cgroup:ro -p 29022:22 -p 29672:15672 -p 29017:27017 rabbitmq_mongo_heisenbug

或..(3) docker run --privileged -ti -e 'container=docker' -v /sys/fs/cgroup:/sys/fs/cgroup:ro -p 29022:22 -p 29672:15672 -p 29017:27017 rabbitmq_mongo_heisenbug

您在ENTRYPOINT同时使用了ENTRYPOINTCMD 。 这意味着,docker将使用默认参数/usr/sbin/init运行/usr/bin/mongod 。 我很确定这不是你想要的。

只要您指定的命令正在运行,Docker就会运行。 我不确定/usr/bin/mongod ,但是如果它运行在守护进程模式下(也就是产生一个进程并返回),那么容器将立即停止运行。 产生的进程将被终止。 /usr/sbin/init或您指定的任何其他命令也是如此。 你可以编写一个小的shell脚本,它产生进程并在前台运行一个脚本,或者你可以使用runit或者类似的工具。

另外,你可能不需要在你的容器中运行sshd 。 看到这里为什么。