From b37f2469c861dcbf2d021ec17ed9d5f2674d3186 Mon Sep 17 00:00:00 2001 From: Marcos Lilljedahl Date: Sat, 12 Nov 2016 11:54:33 -0300 Subject: [PATCH 1/2] Change connection preferrence so it tries with WS first and fallsback to polling --- www/assets/app.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/www/assets/app.js b/www/assets/app.js index f4e68c1..8dc366e 100644 --- a/www/assets/app.js +++ b/www/assets/app.js @@ -68,7 +68,7 @@ method: 'GET', url: '/sessions/' + $scope.sessionId, }).then(function(response) { - var socket = io({path: '/sessions/' + sessionId + '/ws'}); + var socket = io({path: '/sessions/' + sessionId + '/ws', transports: ['websocket', 'polling']}); socket.on('terminal out', function(name, data) { var instance = $scope.idx[name]; From 54378862b36fbf425b272bae31432647bf13372a Mon Sep 17 00:00:00 2001 From: Marcos Lilljedahl Date: Sun, 13 Nov 2016 01:09:29 -0300 Subject: [PATCH 2/2] Use docker 1.13 to allow overlay networks - Print error if resizing fails --- README.md | 6 +++++- services/client.go | 11 +++++++++-- services/docker.go | 2 +- services/instance.go | 7 +++---- services/session.go | 2 +- 5 files changed, 19 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index 40fa564..bebd141 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,11 @@ A live version is available at: http://play-with-docker.com/ ## Requirements -Docker 1.12.1 or higher is required. +Docker 1.13+ is required. You can use docker-machine with the following command: + +``` +docker-machine create -d virtualbox --virtualbox-boot2docker-url https://github.com/boot2docker/boot2docker/releases/download/v1.13.0-rc1/boot2docker.iso +``` ## Installation diff --git a/services/client.go b/services/client.go index 8015e90..fdfa3b2 100644 --- a/services/client.go +++ b/services/client.go @@ -1,6 +1,10 @@ package services -import "github.com/googollee/go-socket.io" +import ( + "log" + + "github.com/googollee/go-socket.io" +) type ViewPort struct { Rows uint @@ -41,7 +45,10 @@ func NewClient(so socketio.Socket, session *Session) *Client { // Resize all terminals in the session wsServer.BroadcastTo(session.Id, "viewport resize", vp.Cols, vp.Rows) for _, instance := range session.Instances { - instance.ResizeTerminal(vp.Cols, vp.Rows) + err := instance.ResizeTerminal(vp.Cols, vp.Rows) + if err != nil { + log.Println("Error resizing terminal", err) + } } }) so.On("disconnection", func() { diff --git a/services/docker.go b/services/docker.go index 74934e7..701db4a 100644 --- a/services/docker.go +++ b/services/docker.go @@ -27,7 +27,7 @@ func GetContainerInfo(id string) (types.ContainerJSON, error) { } func CreateNetwork(name string) error { - opts := types.NetworkCreate{} + opts := types.NetworkCreate{Driver: "overlay", Attachable: true} _, err := c.NetworkCreate(context.Background(), name, opts) if err != nil { diff --git a/services/instance.go b/services/instance.go index 19ebcd0..370178d 100644 --- a/services/instance.go +++ b/services/instance.go @@ -39,11 +39,10 @@ func getDindImageName() string { func NewInstance(session *Session) (*Instance, error) { log.Printf("NewInstance - using image: [%s]\n", dindImage) instance, err := CreateInstance(session.Id, dindImage) - instance.Session = session - if err != nil { return nil, err } + instance.Session = session if session.Instances == nil { session.Instances = make(map[string]*Instance) @@ -66,8 +65,8 @@ func (s *sessionWriter) Write(p []byte) (n int, err error) { return len(p), nil } -func (i *Instance) ResizeTerminal(cols, rows uint) { - ResizeExecConnection(i.ExecId, i.Ctx, cols, rows) +func (i *Instance) ResizeTerminal(cols, rows uint) error { + return ResizeExecConnection(i.ExecId, i.Ctx, cols, rows) } func (i *Instance) Exec() { diff --git a/services/session.go b/services/session.go index d7ec84f..4816ad2 100644 --- a/services/session.go +++ b/services/session.go @@ -42,7 +42,7 @@ func init() { } func CreateWSServer() *socketio.Server { - server, err := socketio.NewServer(nil) + server, err := socketio.NewServer([]string{"websocket", "polling"}) if err != nil { log.Fatal(err) }