はじめに
こんにちは、エンジニアのkeitaMaxです。
今回はhuskyを使用してdocker compose exec コマンドを実行した時にエラーが出て困ったことがあったので、備忘録として残します。
問題
docker compose exec app vendor/bin/phpstan analyze
docker compose exec app composer phpcs .
huskyを使用してコンテナの中に入ってコマンド実行したら以下のようエラーが出て実行できませんでした。
% git commit -m "add husky"
the input device is not a TTY
husky - pre-commit script failed (code 1)
解決策
docker-compose exec
に -T オプションを追加すると治るらしいです。
以下のようにコードを修正しました。
docker compose exec -T app vendor/bin/phpstan analyze
docker compose exec -T app composer phpcs .
これでコミットすると問題なく動きました。
-T オプション
割り当てを無効化。デフォルトは docker compose exec に TTY を割り当て
(引用:https://docs.docker.jp/engine/reference/commandline/compose_exec.html#compose-exec-options)
-T オプションは、TTY (テレタイプ端末) の割り当てを無効にするためのオプションらしいです。
TTYは、対話的なシェルを扱う際に使われて、コマンドラインの出力を見たり、ユーザーが入力を行うことが可能にしています。
今回はTTYを無効にすることで、コマンドの実行結果を純粋な標準出力に出力したかったのでこの方法で大丈夫かなと思います。
おわりに
この記事での質問や、間違っている、もっといい方法があるといったご意見などありましたらご指摘していただけると幸いです。
最後まで読んでいただきありがとうございました!
参考