2016-09-18 198 views
1

如何在一个Docker镜像中运行两个不同的Nodejs应用程序? 两个不同的CMD [ "node", "app.js"]CMD [ "node", "otherapp.js"]将无法​​正常工作,原因可能只有一个CMD指令码头文件在一个Docker镜像中运行两个nodejs应用程序

+0

你可以包裹在“启动脚本”两个节点的应用程序的启动命令 - 在这里看到一个[Docker教程](http://ishlema.co.za/running-services-when-docker-container-starts/) - 我希望你觉得它有帮助。 – ishmaelMakitla

+0

下面给出了您的解决方案,但您为什么需要它?以这种方式连接两者有什么好处? –

+0

我同意大部分时间你会更好地运行自己的图像中的每个应用程序。然而,在我们的情况下,我们没有其他办法可以确保这两个应用程序将在一个网络上运行。尽管如此,这个故事太长以至于没有SO评论。我们希望有一天他们会分裂。 – Mchl

回答

3

我建议使用pm2作为入口点进程,它将处理docker镜像中的所有NodeJS应用程序。这样做的好处是pm2可以作为合适的进程管理器,它的编号为essential in docker。其他有用的功能包括负载均衡,重新启动消耗太多内存的应用程序或因任何原因而死亡的应用程序以及日志管理。

这里有一个Dockerfile我已经使用了一段时间:

#A lightweight node image 
FROM mhart/alpine-node:6.5.0 

#PM2 will be used as PID 1 process 
RUN npm install -g [email protected] 

# Copy package json files for services 

COPY app1/package.json /var/www/app1/package.json 
COPY app2/package.json /var/www/app2/package.json 

# Set up working dir 
WORKDIR /var/www 

# Install packages 
RUN npm config set loglevel warn \ 
# To mitigate issues with npm saturating the network interface we limit the number of concurrent connections 
    && npm config set maxsockets 5 \ 
    && npm config set only production \ 
    && npm config set progress false \ 
    && cd ./app1 \ 
    && npm i \ 
    && cd ../app2 \ 
    && npm i 


# Copy source files 
COPY . ./ 

# Expose ports 
EXPOSE 3000 
EXPOSE 3001 

# Start PM2 as PID 1 process 
ENTRYPOINT ["pm2", "--no-daemon", "start"] 

# Actual script to start can be overridden from `docker run` 
CMD ["process.json"] 

process.json文件中的CMDdescribed here

+0

谢谢,我会研究它。 – Oleg

相关问题