У меня есть контейнер докера в ubuntu 16.04, и я хочу периодически запускать команду докера. После проверки того, что команда успешно запускается из командной строки, я установил crontab со следующим:
*/1 * * * * sudo docker run {image-name} python3 /{path-to-scrip}/script.py
Кажется, это работает нормально, пока сценарий не выдаст что-то, после чего crons не будет t run, и докер перестает работать со следующим сообщением:
docker: Error response from daemon: connection error: desc = "transport: dial unix /var/run/docker/containerd/docke
r-containerd.sock: connect: connection refused".
Я читал, что проблема может быть в stdout, и попробовал следующее в crontab:
*/1 * * * * sudo docker run {image-name} python3 /{path-to-scrip}/script.py > /home/logs 2>&1
Это не устранило проблему и файл журнала остается пустым.
Это выполняется на виртуальной машине, и перезапуск экземпляра возвращает меня к исходной точке, где работает докер.
Я не самый опытный системный администратор и подозреваю, что совершил наивную ошибку, но Я не знаю, как это сделать? Что мне нужно было сделать, чтобы настроить cron?
Дополнительная информация
Я не уверен, что это актуально, но это работает в экземпляре облачного движка Google, а брандмауэр настроен на запрет всех внешних подключений.
Обновление
После того, как я догадался, что он работает на CentOS7, задание cron работало несколько часов, но затем скрипт выдал ошибку. Из этого потока я решил запустить docker inspect --format '{{json .State}}' {идентификатор контейнера для неудачного запуска} - это показывает следующее:
{"Status":"running","Running":true,"Paused":false,"Restarting":false,"OOMKilled":false,"Dead":false,"Pid":8204,"ExitCode":0,"Error":"","StartedAt":"2018-01-02T03:1
5:03.016836367Z","FinishedAt":"0001-01-01T00:00:00Z"}
Я думаю, мне просто нужно понять узнал, как остановить выполнение процесса, чтобы закрыть контейнер.
Я не ставлю это здесь как лучший из возможных ответов. Если бы я мог отметить это как правильный ответ, я бы явно не стал, однако для тех, кто сталкивался с чем-то похожим, я обнаружил, что докер image не было очень отказоустойчивым, даже когда я пробовал использовать CentOS 7. Первое, что мне нужно было сделать, это включить в свой сценарий блоки try / catch.
Во-вторых, чтобы разблокировать докер, я создал следующий сценарий bash:
#!/bin/bash
sudo service docker stop
sudo service docker start
sudo docker stop $(docker ps -a -q)
docker rm $(docker ps -a -q)
Это позволило докеру продолжить работу, я понятия не имею, зачем мне понадобилась эта комбинация команд. Я могу добавить команду cron для этого скрипта, если снова увижу ту же ошибку в будущем.