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) } 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];