KDOC 74: The input device is not a TTYを理解する

この文書のステータス

  • 作成
    • 2024-02-07 貴島
  • レビュー
    • 2024-02-08 貴島

概要

GitHub Actionsでdocker runするとき、-iオプションをつけると“The input device is not a TTY”というエラーになる。これはなにか、書く。

-i はインタラクティブオプション。標準入力を開いたままにして、コンテナ内のプロセスがユーザからの入力を受け取れるようにする。

調べる

まずGitHub Actions上で試す。ttyではないことを確かめる。

tty
# => not a tty

ttyではないということは、標準入出力となっているデバイスがないということだ。デバイスがないのにどうやって表示しているのかというと、標準出力経由だ。ttyと標準出力は異なる。

ブラウザのコンソール画面に見えている画面は入力を受け付けてない。プロンプトは出てない。考えてみると、インタラクティブさは必要ないので自然である。入力を受け付けられないのでinput device is not a TTYと出る。

手元のDockerで近そうな状況にして試す。ttyはなく、インタラクティブでもない。

docker run --rm ubuntu tty
not a tty

したがってGitHub Actions上では、ワークフローファイルのコマンドを↓このような感じで実行しているのではないか。

docker run --rm ubuntu echo {ここでわれわれのコードを実行している感じか?}
{ここでわれわれのコードを実行している感じか?}

なので、標準出力が見えているだけ。

関連