+-

如何在一个docker镜像中运行两个不同的nodejs应用程序?
两个不同的CMD [“node”,“app.js”]和CMD [“node”,“otherapp.js”]将无法工作,因为Dockerfile中只能有一个CMD指令.
两个不同的CMD [“node”,“app.js”]和CMD [“node”,“otherapp.js”]将无法工作,因为Dockerfile中只能有一个CMD指令.
最佳答案
我建议使用
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"]
CMD中的process.json文件是described here
点击查看更多相关文章
转载注明原文:node.js – 在一个docker镜像中运行两个nodejs应用程序 - 乐贴网