微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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死亡.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐