无法获取在 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 (将#修改为@)