Назад | Перейти на главную страницу

Docker возвращает ошибку подключения после настройки в качестве задания cron

У меня есть докер-контейнер на 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 для этого сценария, если снова увижу ту же ошибку в будущем.