首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在kubernetes荚中运行的go程序中的dmidecode

在kubernetes荚中运行的go程序中的dmidecode
EN

Stack Overflow用户
提问于 2021-11-23 17:03:05
回答 1查看 196关注 0票数 1

我有一个在码头集装箱里运行的常规程序。我需要dmidecode命令的输出。但即将到来的是空白。

去:

函数main() {

代码语言:javascript
复制
    cmd := exec.Command("dmidecode","-t 1")
    x,_ := cmd.Output()
    fmt.Println("output =======", string(x))

}

码头经营:

docker运行--设备/dev/mem:/dev/mem -cap SYS_RAWIO -p 8086:8086 -it my_img:1.0.1

我在这里错过了什么?

更新:

在我在Dockerfile中添加了以下内容之后,上面的内容在docker中起了作用:

来自高山:最新运行apk --无缓存-更新--详细添加grep bash dmidecode &&

rm -rf /var/cache/apk/* /tmp/* /sbin/halt /sbin/poweroff /sbin/reboot

并在下面的docker撰写文件:

特权:真的

,但是当试图在kubernetes中使用上面的内容时,它无法获取半编码输出.

我们会非常感谢你的帮助。

EN

回答 1

Stack Overflow用户

发布于 2021-11-23 17:14:20

我在这里错过了什么?

首先,错误处理。

代码语言:javascript
复制
    x,_ := cmd.Output()

千万不要忽视围棋中的一个错误。与像Pyhton这样的语言不同,也没有例外--处理错误返回值是您唯一的机会来判断出什么地方出了问题。

其次,您还忽略了命令的标准输出流。当命令执行不起作用时,这很可能包含有用的错误消息,因此将其作为错误值的一部分提供。 (如果还没有在Cmd配置中捕获)。错误处理的一部分应该是对该错误值执行类型断言 (如果不是零),如果它是有效的*exec.ExitError,如果该类型的断言成功,则检查它的Stderr场以获得错误消息。

第三,看着你的命令,我可以看出你犯了一个简单的错误:

代码语言:javascript
复制
    cmd := exec.Command("dmidecode","-t 1")

在shell中,空格分隔参数。但是这里没有shell;您将-t 1作为一个参数传递给dmidecode。您应该将它们作为单独的论点传递,几乎可以肯定:

代码语言:javascript
复制
    cmd := exec.Command("dmidecode","-t", "1")

最后,您已经找到了不能在码头集装箱上运行dmidecode,但是一定要阅读并理解所接受的答案。然后,将您的停靠容器配置为能够在不运行dmidecode的情况下运行。一旦它在命令行中工作,相同的对接器配置也应该允许它在Go调用下工作。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70084912

复制
相关文章

相似问题

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