func NewProxy(fromUrl, toUrl string) (net.Listener, error) {
	var (
		from host
		to   host
	)

	from.Proto, from.Address = utils.ParseURL(fromUrl)
	to.Proto, to.Address = utils.ParseURL(toUrl)

	waiting, complete := make(chan net.Conn), make(chan net.Conn)

	server, err := net.Listen(from.Proto, from.Address)
	if err != nil {
		return nil, err
	}
	go func() error {
		for {
			conn, err := server.Accept()
			if err != nil {
				return err
			}
			go handleConn(waiting, complete, to)
			go func() {
				waiting <- conn
			}()
		}
	}()

	return server, nil
}
func (d *dockerClient) newConn() (*httputil.ClientConn, error) {
	proto, path := utils.ParseURL(d.path)
	conn, err := net.Dial(proto, path)

	if err != nil {
		return nil, err
	}
	return httputil.NewClientConn(conn, nil), nil
}