docker工websocket附加使用unix套接字

我有docker在/var/run/docker.sock运行。

我想附加到一个容器。 所以我砍了ws库让它发送它的请求socketPath和path。 基本上,它会看到ws+unix:///var/run/docker.sock:/containers/theid/attach/ws?args并做正确的事情。 问题是:docker上的请求返回403禁止。 是通过一个unix套接字访问websocket只是禁用? 如果我向http://localhost:3000/containers/theid/attach/ws?args发出同样的请求,websocket连接就可以正常工作(我有docker守护进程在http和unix套接字上监听)。

另外,看着docker守护进程日志,我看到了预期的GET请求

谢谢!

内部使用的websocket库目前正在validation请求中是否包含具有有效URL的Origin头文件:

 func checkOrigin(config *Config, req *http.Request) (err error) { config.Origin, err = Origin(config, req) if err == nil && config.Origin == nil { return fmt.Errorf("null origin") } return err } 

(摘自: https : //github.com/golang/net/blob/master/websocket/server.go#L102 )。

如果标头无效或缺失,您将得到状态403响应,尽pipeDocker日志不显示任何错误。

一个简单的解决scheme是添加一个有效的头到你的初始请求看起来像这样:

Origin: http://localhost