から次のコマンドを実行しています。ただし、 「入力デバイスが TTY ではありません」というJenkinsfile
エラーが表示されます。
docker run -v $PWD:/foobar -it cloudfoundry/cflinuxfs2 /foobar/script.sh
Jenkinsfile
対話モードを使用せずにスクリプトを実行する方法はありますか?
script.sh
基本的に、Docker コンテナ内で実行したいというファイルがあります。
ベストアンサー1
非対話型にするには、cli からを削除し-it
、TTY を削除します。どちらも必要ない場合 (たとえば、Jenkins または cron スクリプト内でコマンドを実行する場合) は、これを実行する必要があります。
-i
または、TTY からではない入力が docker コマンドにパイプされている場合は、に変更することもできます。コマンド ラインにxyz | docker ...
または のようなものがある場合は、これを実行します。docker ... <input
または、TTY サポートが必要で、入力デバイスで利用できない場合は、これを に変更することもできます-t
。ログの出力のカラー フォーマットを有効にするために 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 を実行するときは、ファイル内でカーソルを移動してみてください。