简体   繁体   中英

mongodb: unrecognized service in Docker

I created my own Docker container that includes the latest version of ubuntu, python3.7 and 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"]

when I run the build command: docker build -t myContainer --no-cache .

it runs successfully till to the point where mongodb should start as a service

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

How do I start the service? I'm trying to start the service with the command: service mongodb start. Isn't that correct? And what does the line:

Removing intermediate container 3d43e1d1cd96

means?

Firstly, it should be service mongod start i guess. But this is not going to solve your problem.

While using Docker, your process has to be a foreground process service mongod start will go into background & your container will exit immediately.

You should use mongod foreground process as below -

CMD ["mongod"]

Put the above CMD at the end of Dockerfile to make sure your container runs mongod.

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

If you want to run multiple processes, use docker ENTRYPOINT in conjunction with supervisord or use a wrapper script.

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM