はじめに
cronでdockerコンテナ内のシェルを動かし、結果をリダイレクトしようとした際、
the input device is not a TTY
とエラーが出て、期待通りに動かなかった。
原因
1 |
/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
1 |
--tty , -t Allocate a pseudo-TTY |
これがcronで実行するときには不要であり、これがあることによりエラーになる。
対応策
tオプションを削る
1 |
/usr/bin/docker exec -i redash_server_1 ./manage.py users list > /tmp/hoge |
これで問題なくcronで実行される