mongodb:Docker中无法识别的服务

时间:2019-05-29 08:36:45

标签: mongodb docker ubuntu

我创建了自己的Docker容器,其中包含最新版本的ubuntu,python3.7和mongodb。

Dockerfile

FROM       ubuntu:latest
MAINTAINER Docker

# Update apt-get sources AND install MongoDB
RUN apt-get update && apt-get upgrade -y
RUN apt-get install -y software-properties-common
RUN apt install -y gnupg2
RUN gpg2 --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys F3B1AA8B

# Installation:
RUN add-apt-repository ppa:deadsnakes/ppa

RUN apt-get install -y python3.7

#Mongodb
RUN apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 0C49F3730359A14518585931BC711F9BA15703C6
RUN apt-add-repository 'deb [ arch=amd64,arm64 ] http://repo.mongodb.org/apt/ubuntu xenial/mongodb-org/3.4 multiverse'

RUN apt-get update

RUN apt-get install -y mongodb-org

# Create the MongoDB data directory
RUN mkdir -p /data/db

# Create the MongoDB data directory
RUN mkdir -p /data/code
RUN mongod --version

RUN mongod --dbpath /data/db --fork --logpath /data/db/log

# COPY some Code to Container
COPY dev /data/code

# Installing pip for python modules
RUN apt-get install -y python3-pip

# Install modules
WORKDIR /data/code/
RUN pip3 install -r requirements.txt

RUN service mongodb start

RUN python3 main.py
RUN python3 server.py

EXPOSE 80

# Set /bin/bash as the dockerized entry-point application
ENTRYPOINT ["/bin/bash"]

当我运行构建命令时:     docker build -t myContainer --no-cache。

它成功运行,直到mongodb应该作为服务启动

.
.
.
Removing intermediate container 3d43e1d1cd96
 ---> 62f10ce67e07
Step 21/25 : RUN service mongodb start
 ---> Running in 42e08e7d7638
mongodb: unrecognized service

如何启动服务?我正在尝试使用以下命令启动服务:service mongodb start。那不正确吗?那行是什么:

Removing intermediate container 3d43e1d1cd96

是什么意思?

1 个答案:

答案 0 :(得分:0)

首先,我猜应该是service mongod start。但这并不能解决您的问题。

使用Docker时,您的进程必须是前台进程service mongod start将进入后台,并且您的容器将立即退出。

您应该使用mongod前台流程,如下所示-

CMD ["mongod"]

将上述CMD放在Dockerfile的末尾,以确保您的容器运行mongod。

官方Dockerfile-
https://github.com/docker-library/mongo/blob/40056ae591c1caca88ffbec2a426e4da07e02d57/3.4/Dockerfile

如果要运行多个进程,请结合使用docker ENTRYPOINT和超级用户或使用包装脚本。

Ref-https://docs.docker.com/config/containers/multi-service_container/