実行直後にスクリプトを実行したい
`docker-compose up -d`
これがdocker-compose.yml
のスニペットです。その他の設定はmysqlサーバー、redis ... etc ....ですが、問題は発生していません
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
したがって、docker-compose up -d
またはdocker-compose up
を実行すると、すべて停止します。 (コンテナは実行し続けません)。私のシェルスクリプトは単純ですが(エコーの実行...またはphpunit)。これが私のスクリプトです。
#!/bin/bash
echo running post install scripts for web..;
cd /srv/myweb
npm install
composer self-update
composer update
そして、これは私が得るエラーです。サーバー(nginx)がまだ実行されていないようです。また、exec bashを使用してサーバーに接続し、プロセスをチェックアウトするとします。 (まだ)nginxが実行されていません。
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
スクリプトは構文的には正しいのに、なぜ終了するのでしょうか?どうすれば正しく実行できますか? (設定を間違えています!)
command はデフォルトのコマンドを上書きします。
それがコンテナが停止する理由です:nginxは決して起動しません。
スクリプトの最後で、nginx
を実行する必要があります
#!/bin/bash
echo running post install scripts for web..;
cd /srv/myweb
npm install
composer self-update
composer update
nginx
ところで、スクリプトを変更して、npm install
とcomposer *update
を必要な場合にのみ実行することをお勧めします(したがって、/ src/myweb内のファイルが存在しない場合のみ)。無駄に増加します。
そうすることで、NginXはdocker stopによって送信されたSIGTERMシグナルをキャッチしないことに注意してください。それは突然それを殺すことができます。
代わりに、SIGTERMがnginxによって確実に受信されるようにする場合、最後の行をexec nginx
に置き換える必要があります。これにより、bashプロセスがnginx自体に置き換えられます。