docker-compose yml exécutant un script après

Je veux lancer un script, juste après avoir exécuté

`docker-compose up -d` 

Voici mon extrait de docker-compose.yml . Les autres parameters sont mysql server, redis … etc …. mais ils ne posent aucun problème

 web: image: nginx container_name: web-project volumes: - ./code:/srv working_dir: /srv/myweb extra_hosts: - "myweb.local:127.0.0.1" ports: - 8081:80 # tty: true command: sh /srv/scripts/post-run-web.sh 

Donc, chaque fois que je lance docker-compose up -d ou docker-compose up tout s’arrête. (les conteneurs ne continuent pas à fonctionner). Bien que mon script shell soit simple (en cours echos … ou phpunit). Voici mon script.

 #!/bin/bash echo running post install scripts for web..; cd /srv/myweb npm install composer self-update composer update 

Et c’est l’erreur que j’ai. C’est comme si le serveur (nginx) ne fonctionnait pas encore. Aussi, si je me connecte au serveur en utilisant exec bash, et je vérifie les processus. Je ne vois pas nginx en cours d’exécution (encore).

 web_1 | You are already using composer version 7a9eb02190d334513e99a479510f87eed18cf958. web_1 | Loading composer repositories with package information web_1 | Updating dependencies (including require-dev) web_1 | Generating autoload files web-project exited with code 0 Gracefully stopping... (press Ctrl+C again to force) Stopping mysql-project... done Stopping rabbitmq-project... done Stopping redis-project... done 

Alors, pourquoi sortir, bien que le script soit correct du sharepoint vue de la syntaxe? Comment puis-je le faire fonctionner correctement? (qu’est-ce que je fais, je me trompe!)

commande remplace la commande par défaut.

C’est la raison pour laquelle votre conteneur s’arrête: nginx ne démarre jamais.

À la fin de votre script, vous devez exécuter nginx

 #!/bin/bash echo running post install scripts for web..; cd /srv/myweb npm install composer self-update composer update nginx 

Par ailleurs, je vous suggère de modifier votre script et d’exécuter npm install and composer *update uniquement si nécessaire (donc seulement si un fichier dans / src / myweb n’existe pas), car cela augmente le temps de démarrage du conteneur.

Notez que, ce faisant, NginX n’acceptera jamais le signal SIGTERM envoyé par docker stop. Cela peut causer sa mort soudaine.

Au lieu de cela, si vous voulez être sûr que SIGTERM est reçu par nginx, vous devez remplacer la dernière ligne par exec nginx . Cela remplace le processus bash par nginx lui-même.