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

时间:2014-06-29 23:17:50

标签: mongodb rabbitmq docker sshd systemd

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

我一直试图从Fedora构建操作系统映像失败,但未能成功启动以下内容:

  1. Systemd
  2. SSHD
  3. 的RabbitMQ
  4. MongoDB的
  5. 我可以使用前3个(Systemd,SSHD和RabbitMQ-Server)。我也可以让MongoDB在容器中工作。但是,我不能让MongoDB与其他3项服务一起工作。

    此外,当我尝试“停靠”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"]
    

    用于构建的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

1 个答案:

答案 0 :(得分:2)

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

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

此外,您可能不需要在容器中运行sshd。请参阅here why。