「bash」スクリプトを実行する訳ではなく、
コンテナに入るだけであるのに何故「bash」を付ける必要があるのでしょうか...?
bash は実行します
実験
たとえば、手元でターミナルを開いてみましょう
そこで bash コマンドを実行すると、一見何も起きていないように見えます:
ところが、exit コマンドを実行しても、2 回入力しないとターミナルは終了しません:
bash コマンドを実行することで、シェルを起動し、
起動したシェルの入力にターミナルを割り当てているために、
このようなふるまいになります
bash スクリプト実行時とのふるまいの違いについて
bash コマンドでは、bashスクリプトを実行するときは
例えば -c オプションでスクリプトを入力したり、
console
1$ bash -c "echo aaaa"
2aaaa
または、実行したいスクリプトのファイルを指定します
bash:test.sh
1#!/usr/bin/env bash
2echo "test"
console
1$ bash test.sh
2test
この場合はシェルで処理が即座に実行され、シェルの入力はターミナルに割り当てられません
docker-compose exec の詳細
ところで、
質問欄のドキュメントは Docker Compose のドキュメントではなく
Docker のドキュメントです
Docker Compose の exec コマンドのドキュメントは次のページです:
docker-compose exec | Docker Documentation
This is the equivalent of docker exec.
With this subcommand you can run arbitrary commands in your services.
Commands are by default allocating a TTY,
so you can use a command such as docker-compose exec web sh
to get an interactive prompt.
これは大体次のような意味です:
これは docker exec に相当します。
このサブコマンドを使用すると、サービスで任意のコマンドを実行できます。
コマンドはデフォルトでTTYを割り当てるため、
例えば docker-compose exec web sh というように
コマンドを使用してインタラクティブなプロンプトを取得できます。
2020/07/27 08:00