Docker 设置为 cron 作业后返回连接错误

Docker 设置为 cron 作业后返回连接错误

我在 ubuntu 16.04 上有一个 docker 容器,我想定期运行 docker 命令。在检查命令是否从命令行成功运行后,我使用以下内容设置了一个 crontab:

*/1 * * * * sudo docker run {image-name} python3 /{path-to-scrip}/script.py

这似乎工作正常,直到脚本输出某些内容,此后 cron 不再运行,并且它会阻止 docker 工作并显示以下消息:

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

这并没有解决问题,日志文件仍然是空的。

这是在虚拟机上运行的,重新启动实例使我回到docker运行的原点。

我不是最有经验的系统管理员,我怀疑我犯了一个幼稚的错误,但我不知道该如何处理?我应该如何设置 cron?

附加信息

我不确定这是否相关,但它是在谷歌云引擎实例上运行的,并且防火墙设置为禁止所有外部连接。

更新

经过一番猜测,我让它在 CentOS7 上运行,cron 作业运行了几个小时,但随后脚本出现错误。该错误是脚本中可以预料到的,但这导致了相同的 docker 消息,并且 cron 不再起作用。

进一步更新此主题我决定运行 docker inspect --format '{{json .State }}' {container id for failed run} - 这显示以下内容:

    {"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"}

我想我只需要弄清楚如何停止该进程运行以关闭容器。

答案1

我并不是把这个作为最好的答案放在这里,如果我可以把它标记为正确答案,我显然不会,但是对于遇到类似问题的人,我发现 docker 镜像的容错能力不强,即使我在 CentOS 7 上尝试过。我需要做的第一件事就是在我的脚本中自由地包含 try/catch 块。

其次,为了解除对 docker 的阻止,我创建了以下 bash 脚本:

#!/bin/bash
sudo service docker stop
sudo service docker start
sudo docker stop $(docker ps -a -q)
docker rm $(docker ps -a -q)

这使得docker能够继续运行,我不知道为什么在我的情况下需要这种命令组合。如果将来再次看到相同的错误,我可能会为这个脚本添加一个cron命令。

相关内容