Docker multiple entrypoints

后端 未结 9 860
情深已故
情深已故 2020-12-13 00:08

Say I have the following Dockerfile:

FROM ubuntu

RUN apt-get update
RUN apt-get install -y apache2
RUN apt-get install -y mongod #pretend this exists

EXPOS         


        
9条回答
  •  挽巷
    挽巷 (楼主)
    2020-12-13 00:13

    As Jared Markell said, if you wan to launch several processes in a docker container, you have to use supervisor. You will have to configure supervisor to tell him to launch your different processes.

    I wrote about this in this blog post, but you have a really nice article here detailing how and why using supervisor in Docker.

    Basically, you will want to do something like:

    FROM ubuntu
    
    RUN apt-get update
    RUN apt-get install -y apache2
    RUN apt-get install -y mongod #pretend this exists
    RUN apt-get install -y supervisor # Installing supervisord
    
    ADD supervisord.conf /etc/supervisor/conf.d/supervisord.conf 
    
    EXPOSE 80
    
    ENTRYPOINT ["/usr/bin/supervisord"]
    

    And add a configuration a file supervisord.conf

    [supervisord]
    nodaemon=true
    
    [program:mongodb]
    command=/etc/mongod/mongo #To adapt, I don't know how to launch your mongodb process
    
    [program:apache2]
    command=/usr/sbin/apache2 -DFOREGROUND
    

    EDIT: As this answer has received quite lot of upvotes, I want to precise as a warning that using Supervisor is not considered as a best practice to run several jobs. Instead, you may be interested in creating several containers for your different processes and managing them through docker compose. In a nutshell, Docker Compose allows you to define in one file all the containers needed for your app and launch them in one single command.

提交回复
热议问题