1. ホーム
  2. docker

[解決済み】エラー "入力デバイスはTTYではありません"

2022-01-26 03:42:46

質問

私は、以下のコマンドを自分の Jenkinsfile . しかし、次のようなエラーが発生します。 入力デバイスは TTY ではありません。 .

docker run -v $PWD:/foobar -it cloudfoundry/cflinuxfs2 /foobar/script.sh

からスクリプトを実行する方法はありますか? Jenkinsfile インタラクティブモードを使わずに?

私は基本的に script.sh をDockerコンテナ内で実行したいのですが。

どのように解決するのですか?

を削除します。 -it をクリックすると、非対話型になり、TTYが削除されます。もし、Jenkinsやcronスクリプトの中でコマンドを実行するなど、どちらも必要ない場合は、このようにしてください。

に変更することもできます。 -i TTY からでない入力を docker コマンドにパイプで接続している場合。次のようなものがある場合 xyz | docker ... または docker ... <input をコマンドラインに入力すると、次のようになります。

に変更することもできます。 -t TTYをサポートしたいが、入力デバイスで利用できない場合。TTY をチェックするアプリで、ログの出力をカラーフォーマットできるようにするため、または後で適切なターミナルでコンテナに接続するときのために、この方法を使用します。

また、対話型端末が必要で、LinuxやMacOSの端末で実行していない場合は、別のコマンドラインインターフェイスを使用します。PowerShellは、Windowsでこのサポートを含むことが報告されています。


TTYとは何ですか?エスケープシーケンスやカーソルの移動などをサポートする端末インターフェースで、昔、メインフレームに付属するダム端末に由来するものだそうです。現在では、Linuxのコマンドターミナルやsshのインターフェイスで提供されています。を参照。 詳しくはwikipediaの記事 .

TTY のあるコンテナとないコンテナの実行の違いを見るには、TTY のないコンテナを実行してみてください。 docker run --rm -i ubuntu bash . そのコンテナの中から、vimをインストールし apt-get update; apt-get install vim . プロンプトがないことに注意してください。ファイルに対して vim を実行する場合、ファイル内でカーソルを動かしてみてください。