cronでdocker execによりコマンド実行して失敗する場合の対処法

cronでdocker execによりコマンド実行しようとすると実行が失敗してしまいました。その原因と対処法について解説します。

docker execをcronで実行しようとしたものの…

dockerで作成したイメージ上でcronによりwgetを定期的に実行しようと試みました。具体的には
docker exec -it docker_host wget http://192.168.100.100/image.bin
しかしどうもwgetにより該当ファイルをダウンロードしてくれません。ターミナルからコマンド入力すると成功しますからcronの設定に問題があるようです。

そこでcronの結果をパイプして何が起こっているか調べてみました。
05/*` * * * * docker exec -it docker_host wget http://192.168.100.100/image.bin > /tmp/test.txt 2>&1
結果
the input device is not a TTY
が出力されていました。どうやら docker execの”-it”オプションが悪さをしているようです。

オプションに問題があった…。

冷静に考えればcronで実行している場合はシェル立ち上げてコマンド実行しているわけではないので、-iオプションは意味がなく、そのためttyも生成されないのではという結論に至りました。よって
docker exec docker_host wget http://192.168.100.100/image.bin
と”-it”オプションなしにしたところ、無事cronで実行されました!めでたしめでたしです!
いつも使っているからと、コマンドのオプションを意識して使用しないとトラブルになるということですね。改めて気をつけます。

コメント