我大约一个月前开始使用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
使用ENTRYPOINT [“ pm2-docker”,“ src / start.js”]启动您的应用
然后可以使用docker exec -ti< containerid>输入docker映像. < shell>
并使用pm2 stop 0停止应用程序,然后重新配置,然后使用pm2 start 0重新启动它.Whitout杀死了容器,从而使pid1死亡.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。