redis - app - docker hub



Comment exécuter un serveur Redis ET une autre application dans Docker? (2)

utiliser supervord qui contrôlerait les deux processus. Le fichier conf pourrait ressembler à ceci:

...
[program:redis]
command= /usr/bin/redis-server /srv/redis/redis.conf
stdout_logfile=/var/log/supervisor/redis-server.log
stderr_logfile=/var/log/supervisor/redis-server_err.log
autorestart=true

[program:nginx]
command=/usr/sbin/nginx
stdout_events_enabled=true
stderr_events_enabled=true

https://src-bin.com

J'ai créé une application Django qui s'exécute dans un conteneur Docker. J'avais besoin de créer un fil à l'intérieur de l'application Django, j'ai donc utilisé Celery et Redis comme base de données Celery. Si j'installe redis dans l'image du docker (Ubuntu 14.04):

RUN apt-get update && apt-get -y install redis-server
RUN pip install redis

Le serveur Redis n'est pas lancé: l'application Django lève une exception car la connexion est refusée sur le port 6379. Si je démarre Redis manuellement, cela fonctionne.

Si je démarre le serveur Redis avec la commande suivante, il se bloque:

RUN redis-server

Si j'essaie de modifier la ligne précédente, cela ne fonctionne pas non plus:

RUN nohup redis-server &

Donc ma question est: existe-t-il un moyen de démarrer Redis en arrière-plan et de le faire redémarrer lorsque le conteneur Docker est redémarré?

La "dernière commande" de Docker est déjà utilisée avec:

CMD uwsgi --http 0.0.0.0:8000 --module mymodule.wsgi

Answer #1

RUN commandes RUN ajoutent uniquement de nouveaux calques d'image. Ils ne sont pas exécutés pendant l'exécution. Seulement pendant le temps de construction de l'image.

Utilisez CMD place. Vous pouvez combiner plusieurs commandes en les externalisant dans un script shell invoqué par CMD :

CMD start.sh

Dans le script start.sh , vous écrivez ce qui suit:

#!/bin/bash
nohup redis-server &
uwsgi --http 0.0.0.0:8000 --module mymodule.wsgi




docker