Nodejs Kubernetes部署不断崩溃

时间:2017-10-18 08:44:39

标签: node.js docker kubernetes dockerfile

我把头发拉了一个星期,但我已经接近放弃了。请分享你的智慧。

这是我的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

有什么建议吗?

3 个答案:

答案 0 :(得分:1)

创建容器时,应该有一个前台进程来保持容器处于活动状态。

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

中引用它

请查看this issue了解详情。

example如何制作Nodejs dockerfile,请务必查看。

答案 1 :(得分:0)

这是显而易见的。您正在使用docker run -it <container>的交互式终端bash会话运行它。当您在kube中运行容器时(或在没有-it的docker中)bash将立即退出,因此这就是它在kube部署中所做的事情。不会崩溃,只是按预期终止。

将命令更改为持久的过程。即使sleep 1d也会这样做 - 它将不再死亡。你的节点应用程序也不会工作......因为你需要你的魔术命令才能在前台启动你的应用程序。

答案 2 :(得分:0)

您可以向Dockerfile添加ENTRYPOINT命令,该命令执行在后台无限期运行的某些内容,例如,您运行脚本 my_service.sh 。反过来,这可以启动像nginx这样的服务器或者只是执行 tail -f / dev / null 。这将使您的pod在kubernetes中运行,因为此容器的主要任务尚未完成。在上面的Dockerfile中,执行了bash,但是一旦运行它就完成了,容器就完成了。因此,当您尝试执行 kubectl运行NAME --image = YOUR_IMAGE 时,它无法连接,因为k8s在新pod启动后几乎立即终止运行容器的pod。这个过程将无限地继续下去。

请在此处查看this answer以获取内联命令,该命令可帮助您按原样运行映像以进行调试...