J'ai construit une image docker qui se compose de deux parties:Impossible de déployer l'image docker deux services à Google App Engine
- application simple nodejs qui est à l'écoute sur le port 8080
- de service haskell qui utilise le snap framework (port 8000)
Je sais qu'il est préférable d'exécuter ces deux parties dans des conteneurs différents, mais il y a une raison de les conserver en un. J'ai donc trouvé un moyen d'exécuter deux services dans un conteneur avec l'utilisation de supervord.
Dans le dockerfile, j'expose 8080, et lorsque j'exécute l'image du docker localement, cela fonctionne très bien. Je peux faire des requêtes POST à NodeJS application, qui à son tour fait la demande POST au port à l'aide haskellmodule 8000. Je lance avec la commande suivante:
docker run -p 8080:8080 image_name
Je poussé l'image à Google Registre des conteneurs et déployé avec l'utilisation du drapeau --image-url. Le processus de déploiement se passe sans aucune erreur, mais après cela, je ne peux pas accéder à mon application. Si je regarde les journaux de la version en cours d'exécution, je vois ce qui suit:
A /usr/lib/python2.7/dist-packages/supervisor/options.py:296: UserWarning: Supervisord is running as root and it is searching for its configuration file in default locations (including its current working directory); you probably want to specify a "-c" argument specifying an absolute path to a configuration file for improved security.
A 'Supervisord is running as root and it is searching '
A 2017-10-08 14:08:45,368 CRIT Supervisor running as root (no user in config file)
A 2017-10-08 14:08:45,368 WARN Included extra file "/etc/supervisor/conf.d/supervisord.conf" during parsing
A 2017-10-08 14:08:45,423 INFO RPC interface 'supervisor' initialized
A 2017-10-08 14:08:45,423 CRIT Server 'unix_http_server' running without any HTTP authentication checking
A 2017-10-08 14:08:45,424 INFO supervisord started with pid 1
A 2017-10-08 14:08:46,425 INFO spawned: 'haskellmodule' with pid 7
A 2017-10-08 14:08:46,427 INFO spawned: 'nodesrv' with pid 8
A 2017-10-08 14:08:47,429 INFO success: haskellmodule entered RUNNING state, process has stayed up for > than 0 seconds (startsecs)
A 2017-10-08 14:08:47,429 INFO success: nodesrv entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
A 2017-10-08 14:13:49,124 WARN received SIGTERM indicating exit request
A 2017-10-08 14:13:49,127 INFO waiting for haskellmodule, nodesrv to die
A 2017-10-08 14:13:49,128 INFO stopped: nodesrv (terminated by SIGTERM)
A 2017-10-08 14:13:49,138 INFO stopped: haskellmodule (terminated by SIGTERM)
Ensuite, il recommence et tout est répété encore et encore.
Mon Dockerfile:
FROM node:latest
RUN apt-get update
RUN curl -sSL https://get.haskellstack.org/ | sh
COPY ./nodesrv /nodesrv
COPY ./haskellmodule /haskellmodule
RUN mkdir /log
WORKDIR /haskellmodule
RUN stack build
WORKDIR/
RUN apt-get update && apt-get install -y supervisor
ADD ./configs/supervisord.conf /etc/supervisor/conf.d/supervisord.conf
EXPOSE 8080
ENTRYPOINT ["/usr/bin/supervisord"]
Ma config supervisord:
[supervisord]
nodaemon=true
[program:nodesrv]
command=node index.js
directory=/nodesrv/
user=root
[program:haskellmodule]
command=stack exec haskellmodule-exe
directory=/haskellmodule/
user=root
Mon fichier app.yaml J'utilise pour le déploiement:
runtime: custom
env: flex
semble donc comme Google App Engine est en cours d'arrêt superviseur (en tenant compte du fait que tout fonctionne sur localhost). Quelle pourrait être une raison de cela?
Merci à l'avance