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"
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
windows docker clientでこのエラーが発生する場合は、次のようにrunコマンドを使用する必要があります。
$ winpty docker run -it ubuntu /bin/bash
「-i」を使用するだけです
docker exec -i [your-ps] [コマンド]
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
ステップをスキップできることを発見しました。
Boot2dockerを使用してWindowsで次のコマンドを実行すると、「非tty入力でttyモードを有効にできません」というメッセージが表示されます
docker exec -it <containerIdOrName> bash
以下のコマンドは問題を修正しました
winpty docker exec -it <containerIdOrName> bash
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
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:/#
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