結論
この記事を書いた直後に、別の解決策を発見してしまった。
crontab
* * * * * docker run -i some-image some-command
癖でdocker run -it
してしまっていたのが原因でした。
↓ここから下は模索中で、恐らく役に立たない記事です。
やりたいこと
定期的に、Dockerイメージを動かしたい。
Docker内部のCronから動かすのではなく、ホスト側のCronでdocker run
したい。
最初、
crontab
* * * * * docker run -it some-image some-command
としていたが、the input device is not a TTY
と怒られてしまう。
そこで、予めコンテナを作成&実行しておき、そのコンテナにCronからコマンドを渡すという方法があるらしい。
実行するコマンドは、停止しなければ何でも良い。
docker run -it -d --name some-container some-image tail -f /some/log.log
crontab
* * * * * docker exec some-container some-command
メモ
-
docker exec -it
とすると、また怒られてしまう -
--rm
オプションを付けないと、コンテナ名が重なってしまい不可 -
-d
オプションで、デーモンっぽく起動できる -
--rm
オプションと-d
オプションは併用できない。なんで? - Docker内部にCronをインストールしてしまって、
cron -f
とかで起動しっぱなしにしておいた方が楽かも?