2016-09-18 187 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

相關問題