日: 2018年10月16日

  • the input device is not a TTY

    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で実行される