У меня есть докер-контейнер на ubuntu 16.04, и я хочу периодически запускать команду докера. После проверки того, что команда успешно запускается из командной строки, я установил crontab со следующим:
*/1 * * * * sudo docker run {image-name} python3 /{path-to-scrip}/script.py
Кажется, это работает нормально, пока скрипт не выдаст что-то, после чего crons не запускается и не останавливает работу докера со следующим сообщением:
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 работало несколько часов, но затем скрипт выдал ошибку. Ошибка - это то, чего следует ожидать от сценария, но это привело к тому же сообщению докера, и 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"}
Думаю, мне просто нужно выяснить, как остановить процесс, чтобы закрыть контейнер.
Я не помещаю это здесь как лучший возможный ответ, если бы я мог отметить это как правильный ответ, я бы явно не стал, однако для всех, кто сталкивался с чем-то подобным, я обнаружил, что образ докера не был очень отказоустойчивым, даже когда Я пробовал использовать 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 для этого сценария, если снова увижу ту же ошибку в будущем.