我大约一个月前开始使用 docker,但找不到令人满意的解决方案来解决以下情况。
我想部署一个 NodeJS 应用程序,因为使用ENTRYPOINT是最佳实践,所以我更喜欢使用这个命令:
ENTRYPOINT ["node", "src/start.js"].
但是,我还没有找到在容器内重新启动入口点进程的方法,这意味着每次我更改 nodejs 应用程序中的某些内容时,我都必须重新启动整个容器,这在具有共享卷的开发环境中有点烦人。
我想到的一个解决方案是为此使用流程管理器,并执行类似的操作,ENTRYPOINT ["pm2", "src/start.js"]但对单个流程使用流程管理器对我来说似乎是错误的。
我想寻求一种方法,让我尽可能接近热插拔,而无需在“开发 Docker”和“生产 Docker”之间更改 Dockerfile。
TL;DR:应该可以在我的开发机器上不安装 NodeJS 或应用程序需要的任何东西,但可以在 docker 容器中运行所有内容,同时能够在所述容器中重新启动节点进程,而无需重新启动容器本身。更改 Dockerfile 不是我的选择,我想使用ENTRYPOINT.
编辑:
Dockerfile
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"]
Run Code Online (Sandbox Code Playgroud)
构建图像 …