如何解决无法获取在 Docker 容器中运行的 gRPC Go 客户端的对等 pid
我有一个在 Docker 容器中运行的 gRPC Go 客户端,通过 Unix 域套接字向 gRPC 服务器发送请求。在服务器上,我试图获取客户端的对等 PID,以便我可以在处理请求之前对其进行验证。但是,当它在 docker 容器中运行时,客户端的对等 PID 始终为 0。当客户端在容器外运行时,我能够看到对等 PID。 这是尝试获取对等 PID 的代码片段。
l,err := net.Listen("unix","/tmp/grpc.sock")
if err != nil {
fmt.Println("listen error",err.Error())
return
}
c,err := l.Accept()
if err == nil {
connType = c.RemoteAddr().Network()
var ucred *unix.Ucred
if connType == "unix" {
uc,ok := c.(*net.UnixConn)
if !ok {
fmt.Println("Unexpected conn type")
} else {
f,err := uc.File()
defer f.Close()
if err != nil {
fmt.Println("Error getting unix file %v",err)
}
ucred,err = unix.GetsockoptUcred(int(f.Fd()),unix.SOL_SOCKET,unix.SO_PEERCRED)
if err != nil {
fmt.Println("Error with sockopt %v",err)
} else {
fmt.Println("peer pid: %d",ucred.Pid)
}
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。