Nodejs Kubernetes部署不断崩溃

我正在拉我的头发一个星期,但我接近放弃。 请分享你的智慧。

这是我的Docker文件:

FROM node RUN apt-get update RUN mkdir -p /var/www/stationconnect RUN mkdir -p /var/log/node WORKDIR /var/www/stationconnect COPY stationconnect /var/www/stationconnect RUN chown node:node /var/log/node COPY ./stationconnect_fromstage/api/config /var/www/stationconnect/api/config COPY ./etc/stationconnect /etc/stationconnect WORKDIR /var/www/stationconnect/api RUN cd /var/www/stationconnect/api RUN npm install RUN apt-get install -y vim nano RUN npm install supervisor forever -g EXPOSE 8888 USER node WORKDIR /var/www/stationconnect/api CMD ["bash"] 

它在docker工作正常运行,例如

 docker run -it 6bcee4528c7c 

有什么build议?

创build容器时,应该有一个前台进程来保持容器的活性。

我所做的是添加一个shell脚本行, while true; do sleep 1000; done while true; do sleep 1000; done 在我的docker-entrypoint.sh末尾while true; do sleep 1000; done ,并在ENTRYPOINT [/docker-entrypoint.sh]ENTRYPOINT [/docker-entrypoint.sh]

看看这个问题了解更多。

有一个例子,如何做一个Nodejs dockerfile,一定要检查出来。

这是显而易见的。 你正在用docker run -it <container>交互式terminalbash会话。 当你在kube中运行一个容器时(或者在没有-it的docker中)bash会立即退出,所以这就是kube部署中的做法。 没有崩溃说,只是按预期终止。

改变你的命令一些持久的过程。 即使sleep 1d也会 – 不会再死了。 你的节点应用程序也不会工作,因为你需要你的魔法命令在前台启动你的应用程序。

你可以在你的Dockerfile中添加一个ENTRYPOINT命令来执行一些在后台无限期运行的东西,比如说你运行一个脚本my_service.sh 。 这反过来可以启动一个像nginx这样的web服务器作为一个服务,或者简单地做一个tail -f / dev / null 。 这将使您的吊舱在kubernetes中运行,因为此容器的主要任务尚未完成。 在上面的Dockerfile中,bash被执行,但一旦运行完成,容器完成。 因此,当你试图做kubectl运行名称–image = YOUR_IMAGE它无法连接,因为k8s是在新的pod启动后几乎立即终止运行你的容器的pod。 这个过程将会像这样无限地继续下去。

请在这里看到这个答案一个内联命令,可以帮助您运行您的图像作为debugging目的…