the input device is not a TTY

はじめに

cronでdockerコンテナ内のシェルを動かし、結果をリダイレクトしようとした際、

“` the input device is not a TTY “`

とエラーが出て、期待通りに動かなかった。

原因

/usr/bin/docker exec -it redash_server_1 ./manage.py users list > /tmp/hoge

cronで動かすのに
“` docker exec -it “`

-it のtが邪魔していた。

 

dockerのコンテナ内に入るとき、もしくはコンテナ内のシェルを動かすとき、docker exec -itがもはや決まり文句のように打っていたが、

改めてオプションを見直して見ると、-t はTTYデバイスに割り当てるオプションらしい。

 

https://docs.docker.com/engine/reference/commandline/exec/#usage

--tty , -t        Allocate a pseudo-TTY

これがcronで実行するときには不要であり、これがあることによりエラーになる。

対応策

tオプションを削る

/usr/bin/docker exec -i redash_server_1 ./manage.py users list > /tmp/hoge

これで問題なくcronで実行される