2017-10-18 8 views
0

Je me tire les cheveux pendant une semaine mais je suis sur le point d'abandonner. S'il te plaît, partage ta sagesse.Nodejs Kubernetes Déploiement continue de s'écraser

Ceci est mon fichier 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"] 

Il fonctionne très bien dans docker seul exemple en cours d'exécution

docker run -it 6bcee4528c7c 

Un conseil?

+0

Partagez 'kubectl describe __pod__' et' kubectl logs __pod__' – 3h4x

Répondre

0

c'est un peu évident. Vous l'exécutez avec une session de terminal bash interactive avec docker run -it <container>. Lorsque vous exécutez un conteneur en kube (ou dans le docker sans -it) bash va quitter immédiatement, c'est donc ce qu'il fait dans le déploiement de kube. Pas de plantage par exemple, se terminant juste comme prévu.

Changez votre commande pour un processus de longue durée. Même sleep 1d fera - il ne mourra plus. Votre application de noeud ne fonctionnera pas non plus ... pour cela vous avez besoin de votre commande magique pour lancer votre application au premier plan.

0

Vous pouvez ajouter une commande ENTRYPOINT à votre Dockerfile qui exécute une tâche exécutée en arrière-plan indéfiniment, par exemple, vous exécutez un script my_service.sh. Ceci, à son tour, pourrait démarrer un serveur web comme nginx en tant que service ou simplement faire un tail -f/dev/null. Cela permettra à votre pod de fonctionner dans les kubernetes car la tâche principale de ce conteneur n'est pas encore terminée. Dans votre Dockerfile ci-dessus, bash est exécuté, mais une fois lancé, il se termine et le conteneur se termine. Par conséquent, lorsque vous essayez de faire kubectl exécuter NAME --image = YOUR_IMAGE il ne parvient pas à se connecter car k8s termine le pod qui exécute votre conteneur presque immédiatement après le démarrage du nouveau pod. Ce processus continuera comme ceci infiniment.

S'il vous plaît voir this answer ici pour tout comme des fins de débogage ...

1

commande qui peut vous aider à gérer votre image en ligne Lorsque créer un conteneur, vous devriez avoir un processus de premier plan pour maintenir le récipient en vie.

Ce que je l'ai fait est d'ajouter une ligne de script shell while true; do sleep 1000; done à la fin de mon docker-entrypoint.sh et référence dans ENTRYPOINT [/docker-entrypoint.sh]

Jetez un oeil à this issue pour en savoir plus.

Il existe un example comment créer un dockerfile Nodejs, assurez-vous de le vérifier.