node.js-Docker重新启动入口点

前端之家收集整理的这篇文章主要介绍了node.js-Docker重新启动入口点 前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我大约一个月前开始使用docker,但无法找到满足以下情况的令人满意的解决方案.

我想部署一个NodeJS应用程序,并且由于使用ENTRYPOINT是一种最佳实践,所以我更喜欢使用以下命令:
ENTRYPOINT [“ node”,“ src / start.js”].

但是,我还没有找到一种方法来重新启动容器中的入口点过程,这意味着每次我在nodejs应用程序中进行更改时,都必须重新启动整个容器,这在具有共享卷的开发环境中会很烦人.

我想到的解决方案是为此使用进程管理器,并执行类似ENTRYPOINT [“ pm2”,“ src / start.js”]的操作,但是对单个进程使用进程管理器对我来说似乎是错误的.

我想寻求一种方法,使我尽可能接近热交换,而无需在我的“开发Docker”和“生产Docker”之间完全更改Dockerfile.

TL; DR:应该可以在我的开发机器上不安装NodeJS或应用程序需要的任何东西,而可以在docker容器中运行所有内容,同时能够在所述容器中重新启动节点进程而不必重新启动容器本身.更改Dockerfile对我来说不是一个选择,我想使用ENTRYPOINT.

编辑:
Docker文件

FROM mhart/alpine-node:4.4.7

# add curl and bash
RUN apk add --update curl bash

#Add user
RUN addgroup websites && adduser -s /bin/bash -D -G websites user-api

#Copy app
WORKDIR /srv/app
ADD src ./src/
ADD node_modules ./node_modules

#Expose port
EXPOSE 3000

ENTRYPOINT ["node","src/start.js"]

建立图像

docker build -t app .

使用以下命令在我的工作站上运行容器

docker run -dit -p 53017:3000 --name app -v c:/Users/hesxenon/Projects/app:/srv/app app:latest
最佳答案
这个pm2有一个很棒的npm模块.将其作为全局软件包安装在nodejs基础映像中.

使用ENTRYPOINT [“ pm2-docker”,“ src / start.js”]启动您的应用

然后可以使用docker exec -ti< containerid>输入docker映像. < shell>
并使用pm2 stop 0停止应用程序,然后重新配置,然后使用pm2 start 0重新启动它.Whitout杀死了容器,从而使pid1死亡.

猜你在找的Docker相关文章