docker-compose yml ejecutando un script después de subir


Quiero ejecutar un script, justo después de ejecutar

`docker-compose up -d` 

Aquí está mi fragmento de docker-compose.yml . Los otros ajustes son mysql server, redis...sucesivamente....pero no están causando ningún problema

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

Así que cada vez que corro docker-compose up -d o docker-compose up Todo se detiene. (los contenedores no siguen funcionando). Aunque mi script de shell es simple (ejecutando ecos...o phpunit). Aquí está mi guión.

#!/bin/bash

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

Y este es el error que obtengo. Es como si el servidor (nginx) no se estuviera ejecutando todavía. También si me conecto a el servidor usando exec bash, y compruebo los procesos. No veo nginx funcionando (todavía).

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

Entonces, ¿por qué está saliendo, aunque el script es correcto desde el punto de vista sintáctico? ¿Cómo puedo hacer que funcione correctamente? (¿qué estoy haciendo, configurando mal!)

Author: Viacheslav Shalamov, 2015-10-08

1 answers

Command anula el comando predeterminado.

Esa es la razón por la que su contenedor se detiene: nginx nunca comienza.

Al final de tu script tienes que ejecutar nginx

#!/bin/bash

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

Por cierto, le sugiero que cambie su script y ejecute npm install y composer *update solo si es necesario (por lo tanto, solo si algún archivo en /src/myweb no existe), porque hace que el tiempo de inicio de su contenedor aumente en vano.

Tenga en cuenta que al hacerlo, NginX nunca atrapará la señal SIGTERM enviada por docker para. Eso puede causar que sea abruptamente asesinado.

En su lugar, si desea asegurarse de que SIGTERM es recibido por nginx, debe reemplazar la última línea con exec nginx. Esto reemplaza el proceso bash con nginx en sí.

 26
Author: nessuno,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-09-28 16:58:02