我有一个运行Python程序的容器,它可以以两种方式运行,在本地主机终端中使用docker exec
,或者通过发出API请求(即容器之外的请求)来执行与使用第一种方法执行相同的命令。我要做的是,每当容器中的Python程序引发错误时,API就会注意到它。
在Python程序中正在执行的错误处理是使用logging.exception在终端中打印错误消息和跟踪,而在API中,我正在使用子流程方法来生成docker exec
(我知道使用Docker撰写和服务会更好,但现在不行)
码头集装箱内的尝试/捕获程序:
...
try:
... something ...
except IOError as e:
self._log.exception("Error in my program\n{}".format(e))
API函数:
...
try:
CMD = "docker exec <continer_id> <params>"
subprocess.check_output(CMD, shell=True)
return{ 'response' : 'Done'}, 200
except Exception as e:
return{ 'response' : 'Error {}'.format(e)}, 500
我希望API函数捕获在Docker容器中引发的异常。或者,如果没有其他的方法去做这样的事情。
发布于 2019-07-25 12:21:21
正如注释中所指出的,您不应该直接在网络请求上执行Docker命令(它容易出错,既不灵活,也不容易维护,也不容易受到攻击)
你能做的是:
stderr
中的错误和日志异常获得子图返回和错误代码。在调用程序中,您可以很容易地处理错误代码和stderr
输出来记录它并执行特殊操作。https://stackoverflow.com/questions/57198047
复制相似问题