はじめに
2022/3/13 時点で、表題の現象を確認しています。また、以下のいずれかの手段で解決することを確認しています。
docker compose
ではなくdocker-compose
コマンドを使うdocker compose run
を実行する際に-T
(--no-TTY
) コマンドライン引数を渡す
以下の手段では解決できませんでした。
- pytestを実行する際に
-v
オプションを渡す docker compose run
を実行する際に--compatibility
コマンドライン引数を渡す
docker compose
と docker-compose
の違い
もともとDocker Composeというツールが docker-compose
というコマンドとして提供されていました。docker-compose
はPython製です。
その後、Docker Composeがメジャーバージョンアップして、Go言語で書き直されて docker compose
というサブコマンドの形で提供されるようになりました。
Docker Compose自体の説明や、バージョンアップによる変化などについての詳しい情報は、公式リポジトリや以下の記事などを参照してください。
経緯
この現象に気づいたきっかけは、自作したpytestプラグインに以下のissueが立ったことです。
Docker環境化でpytestプラグインがうまく動かない、と報告されています。貼ってもらったログを確認したところ、pytestプラグインどころかpytestコマンド自体が何も出力していないことに気づきました。
issueで参照されているリポジトリを手元にcloneして、CIと同様にpytestコマンドを走らせてみましたが、とくに変わったところもなくテストが完走してログも出力されました。CI環境下でしか再現しない現象ということで嫌な予感がしてきますね。
もしかするとGitHub Actions上だとdocker composeコマンドとの食い合わせが悪いのかも? docker-composeを使ってみてはどうでしょう、と返事したところ、それでうまく動くようになったようで、issueはcloseされました。
その後、気になったのでちょっと調査してみました。いくつか試してみて、docker compose
コマンドのままでも -T
オプションを渡せばこれまで通り動く、ということを突き止めました。python
コマンドの出力は -T
オプションなしでも正常に行われたので、pytestのログ出力の仕組みと docker compose
の食い合わせがよくないのかもしれません。