web-dev-qa-db-ja.com

docker exec -itは、「非tty入力でttyモードを有効にできません」を返します

docker exec -itコマンドは、「非tty入力でttyモードを有効にできません」というエラーを返します

level="fatal" msg="cannot enable tty mode on non tty input" 

CentOSボックス6.6でdocker(1.4.1)を実行しています。次のコマンドdocker exec -it containerName /bin/bashを実行しようとしていますが、次のエラーが発生します

level="fatal" msg="cannot enable tty mode on non tty input" 
58
user2118095

docker exec -iの代わりにdocker exec -itを実行すると、問題が修正されました。実際、私のスクリプトは端末ではないCRONTABによって起動されました。

念のため:

Usage: docker exec [OPTIONS] CONTAINER COMMAND [ARG...]

Run a command in a running container

  -i, --interactive=false    Keep STDIN open even if not attached  
  -t, --tty=false            Allocate a pseudo-TTY
82

windows docker clientでこのエラーが発生する場合は、次のようにrunコマンドを使用する必要があります。

$ winpty docker run -it ubuntu /bin/bash

14
Senthil

「-i」を使用するだけです

docker exec -i [your-ps] [コマンド]

9
Mr.Thanks

Windowsでdocker-machineを使用していて、GIT BashまたはCygwinを使用している場合、実行中のコンテナーを「取得」するには、次の手順を実行する必要があります。

docker-machine ssh defaultで仮想マシンにSSH接続します(Virtualboxが最も可能性が高い)

docker exec -it <container> bashでコンテナに入ります。

編集:

私は最近、Windows PowerShellを使用している場合、コンテナーに直接execできること、CygwinまたはGit Bashではwinpty docker exec -it <container> bashを使用して上記のdocker-machine sshステップをスキップできることを発見しました。

7
alvinc

Boot2dockerを使用してWindowsで次のコマンドを実行すると、「非tty入力でttyモードを有効にできません」というメッセージが表示されます

docker exec -it <containerIdOrName> bash

以下のコマンドは問題を修正しました

winpty docker exec -it <containerIdOrName> bash
5
raok1997

docker execは新しいコマンドを実行します 既に実行中のコンテナ内 。新しいコンテナを開始する方法ではありません。docker runを使用してください。

これが「非tty入力」エラーの原因である可能性があります。または、Dockerを実行している場所でもかまいません。それは本当の端末ですか?つまり、完全なttyセッションが利用可能ですか?対話型セッションを使用しているかどうかを確認したい場合があります

[[ $- == *i* ]] && echo 'Interactive' || echo 'Not interactive'

from https://unix.stackexchange.com/questions/26676/how-to-check-if-a-Shell-is-login-interactive-batch

4
Andy

Git for Windowsに同梱されているMinttyを使用して、Windows 7 64ビットでこの同じエラーメッセージが表示されました。 $docker run -i -t ubuntu /bin/bash cannot enable tty mode on non tty input

他の回答が示唆したように、上記のコマンドの先頭にwinptyを付けようとしましたが、実行すると次のエラーメッセージが表示されました:$ winpty docker run -i -t ubuntu /bin/bash exec: "D:\\Git\\usr\\bin\\bash": executable file not found in $PATH docker: Error response from daemon: Container command not found or does not exist..

次に、たまたま次のコマンドを実行して、必要なものを取得しました:$ winpty docker run -i -t ubuntu bash root@512997713d49:/# ls bin dev home lib64 mnt proc run srv tmp var boot etc lib media opt root sbin sys usr root@512997713d49:/#

3
leon

Jenkinsジョブでdocker exec -itを実行していますが、「非tty入力でttyモードを有効にできません」というエラーが表示されます。 docker execコマンドへの出力は返されません。私の仕事のログインシーケンスは次のとおりです。

jenkins Shell -> ssh user@<testdriver> -> ssh root@<sut> -> su - <user> -> docker exec -it <container>

Jenkinsの初期sshで-Tフラグを使用するように変更しました。 「-T-擬似端末の割り当てを無効にします」。そして、-itの代わりにdocker execで-iフラグを使用します。 「-i-インタラクティブ。-t-疑似ttyを割り当てます。」これで問題が解決したようです。

jenkins Shell -> ssh -T user@<testdriver> -> ssh root@<sut> -> su - <user> -> docker exec -i <container>

動作kindofは、このdocker exec ttyバグに一致します: https://github.com/docker/docker/issues/8755 。そのdockerのバグに関する回避策では、これを使用することをお勧めします。

docker exec -it <CONTAINER> script -qc <COMMAND>

その回避策を使用しても、私の問題は解決しませんでした。でも面白いです。異なるフラグを使用してこれらを試して、異なるssh呼び出しの下で、docker execで-tを使用しても「not a tty」を確認できます。

$ docker exec -it <CONTAINER> script -qc 'tty'
/dev/pts/0
$ docker exec -it <CONTAINER> 'tty'            
not a tty
$ docker exec -it <CONTAINER> bash -c 'tty' 
not a tty
0
gaoithe