diff --git a/api/server/router/container/container_routes.go b/api/server/router/container/container_routes.go index 3c389245ce..6823a1a223 100644 --- a/api/server/router/container/container_routes.go +++ b/api/server/router/container/container_routes.go @@ -502,6 +502,8 @@ func (s *containerRouter) wsContainersAttach(ctx context.Context, w http.Respons done := make(chan struct{}) started := make(chan struct{}) + version := httputils.VersionFromContext(ctx) + setupStreams := func() (io.ReadCloser, io.Writer, io.Writer, error) { wsChan := make(chan *websocket.Conn) h := func(conn *websocket.Conn) { @@ -516,6 +518,11 @@ func (s *containerRouter) wsContainersAttach(ctx context.Context, w http.Respons }() conn := <-wsChan + // In case version is higher than 1.26, a binary frame will be sent. + // See 28176 for details. + if versions.GreaterThanOrEqualTo(version, "1.26") { + conn.PayloadType = websocket.BinaryFrame + } return conn, conn, conn, nil } diff --git a/docs/api/version-history.md b/docs/api/version-history.md index e8cb046d0c..d795a895c1 100644 --- a/docs/api/version-history.md +++ b/docs/api/version-history.md @@ -17,6 +17,9 @@ keywords: "API, Docker, rcli, REST, documentation" [Docker Engine API v1.26](v1.26/) documentation +* `GET /containers/(id or name)/attach/ws` now returns WebSocket in binary frame format for API version >= v1.26, + and returns WebSocket in text frame format for API version< v1.26, for the purpose of backward-compatibility. + ## v1.25 API changes [Docker Engine API v1.25](v1.25.md) documentation