在一个Docker镜像中运行两个nodejs应用程序

我怎么能在一个泊坞窗图像中运行两个不同的nodejs应用程序? 两个不同的CMD [ "node", "app.js"]CMD [ "node", "otherapp.js"]将不起作用,导致Dockerfile中只能有一个CMD指令。

我build议使用pm2作为处理docker映像中所有NodeJS应用程序的入口点进程。 这样做的好处是,pm2可以作为一个合适的stream程pipe理器,这在docker工作中是必不可less的 。 其他有用的function是负载平衡,重新启动耗费太多内存的应用程序,或因任何原因死亡,以及日志pipe理。

下面是我现在使用了一段时间的Dockerfile

 #A lightweight node image FROM mhart/alpine-node:6.5.0 #PM2 will be used as PID 1 process RUN npm install -g pm2@1.1.3 # 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"] 

这里描述 CMD process.json文件