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

标签 mongodb rabbitmq docker sshd systemd

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

我一直试图从Fedora构建操作系统镜像失败,无法启动以下操作:

  • Systemd
  • SSHD
  • RabbitMQ
  • MongoDB

  • 我可以使前三个(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"]
    

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

    最佳答案

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

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

    另外,您可能不需要在容器中运行sshd。看到here为什么。

    关于mongodb - 使用其他服务启动时,Docker不启动MONGODB,并且IPAddress不出现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24481107/

    相关文章:

    javascript - 如何上传与文档相关的音频?

    node.js - 获取 MongoDB 文档中嵌入集合的计数

    mongodb - 填充方法的 mgo 示例

    ruby-on-rails - 是否有支持 MongoDB 和 Devise 的 Rails 管理界面?

    c# - RabbitMQ 3.5 和消息优先级

    php - 无法从 php 容器连接到 mysql 容器

    http - 面向服务的架构 - AMQP 或 HTTP

    java - 删除交换后 RabbitTemplate 发送失败

    docker - 使用 docker exec 运行 nvm

    docker - 如何将多个文件复制到 Docker 容器内的特定目录/位置