script run into entrypoint container compose attach bash nginx docker docker-compose

bash - run - docker-compose yml ejecutando un script después



docker run bash into container (1)

Quiero ejecutar un script, justo después de ejecutar

`docker-compose up -d`

Aquí está mi fragmento de docker-compose.yml . Las otras configuraciones son mysql server, redis ... etc .... 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 ejecuto docker-compose up -d o docker-compose up Todo se detiene. (los contenedores no siguen funcionando). Aunque mi script de shell es simple (ejecuta echos ... o phpunit). Aquí está mi script.

#!/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) aún no se ejecutara. También si me conecto al servidor usando exec bash, y reviso los procesos. No veo ejecutar nginx (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 guión es correcto en cuanto a la sintaxis? ¿Cómo puedo hacer que funcione correctamente? (¿Qué estoy haciendo, configurar mal!)


command anula el comando predeterminado.

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

Al final de tu script, debes ejecutar nginx

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

Por cierto, te sugiero que cambies tu script y npm install and composer *update solo si es necesario (solo si algún archivo en / src / myweb no existe), ya que hace que el tiempo de inicio de tu contenedor sea en vano.

Tenga en cuenta que al hacerlo, NginX nunca captará la señal SIGTERM enviada por Docker Stop. Eso puede causar que sea abruptamente asesinado.

En cambio, si quiere estar seguro de que nginx recibe SIGTERM, debe reemplazar la última línea con exec nginx . Esto reemplaza el proceso bash con nginx en sí mismo.