首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >是否有一种方法可以从Docker容器外部的Python程序中获取错误并处理它?

是否有一种方法可以从Docker容器外部的Python程序中获取错误并处理它?
EN

Stack Overflow用户
提问于 2019-07-25 08:57:42
回答 1查看 2.3K关注 0票数 1

我有一个运行Python程序的容器,它可以以两种方式运行,在本地主机终端中使用docker exec,或者通过发出API请求(即容器之外的请求)来执行与使用第一种方法执行相同的命令。我要做的是,每当容器中的Python程序引发错误时,API就会注意到它。

在Python程序中正在执行的错误处理是使用logging.exception在终端中打印错误消息和跟踪,而在API中,我正在使用子流程方法来生成docker exec (我知道使用Docker撰写和服务会更好,但现在不行)

码头集装箱内的尝试/捕获程序:

代码语言:javascript
运行
复制
...
try:
    ... something ...
except IOError as e:
    self._log.exception("Error in my program\n{}".format(e))

API函数:

代码语言:javascript
运行
复制
...
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容器中引发的异常。或者,如果没有其他的方法去做这样的事情。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-07-25 12:21:21

正如注释中所指出的,您不应该直接在网络请求上执行Docker命令(它容易出错,既不灵活,也不容易维护,也不容易受到攻击)

你能做的是:

  • 不是通过Docker直接调用您的子进程,而是围绕另一个API进行包装,您可以在容器中与第一个服务并行地运行该API,并在一个服务到另一个服务之间进行HTTP调用或类似的调用。您将能够更有效地处理错误(例如HTTP错误代码和有效负载),并且不会受到bash注入攻击。
  • 如果继续使用子命令调用,则可以根据stderr中的错误和日志异常获得子图返回和错误代码。在调用程序中,您可以很容易地处理错误代码和stderr输出来记录它并执行特殊操作。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57198047

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档