0

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

我一直在尝试从 Fedora 构建操作系统映像,但未能成功启动以下操作:

  1. 系统
  2. 固态混合硬盘
  3. 兔MQ
  4. MongoDB

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

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

我在 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

4

1 回答 1

2

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

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

此外,您可能不需要sshd在容器中运行。看看这里为什么。

于 2014-06-30T07:54:12.277 回答