2017-10-08 2 views
0

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

Répondre

0

Vous devez configurer votre fichier app.yaml pour ouvrir les ports 8080 et 8000. Vous devez faire en plus à l'ouverture du port dans votre Dockerfile avec EXPOSE. La documentation de la configuration de votre fichier app.yamlis located here, et l'exemple de la documentation est copié ci-dessous:

Ajoutez ce qui suit à votre app.yaml:

network: 
    instance_tag: TAG_NAME 
    name: NETWORK_NAME 
    subnetwork_name: SUBNETWORK_NAME 
    forwarded_ports: 
    - PORT 
    - HOST_PORT:CONTAINER_PORT 
    - PORT/tcp 
    - HOST_PORT:CONTAINER_PORT/udp