diff --git a/src/browser.js b/src/browser.js index cdd788e1e5..7104cda3c4 100644 --- a/src/browser.js +++ b/src/browser.js @@ -2,7 +2,7 @@ import app from 'app'; import BrowserWindow from 'browser-window'; import fs from 'fs'; import os from 'os'; -import ipc from 'ipc'; +var ipc = require('electron').ipcMain; import path from 'path'; import child_process from 'child_process'; @@ -57,7 +57,7 @@ app.on('ready', function () { mainWindow.openDevTools({detach: true}); } - mainWindow.loadUrl(path.normalize('file://' + path.join(__dirname, 'index.html'))); + mainWindow.loadURL(path.normalize('file://' + path.join(__dirname, 'index.html'))); app.on('activate-with-no-open-windows', function () { if (mainWindow) { diff --git a/src/components/ContainerHomeFolders.react.js b/src/components/ContainerHomeFolders.react.js index ad52f39d71..e56fa451be 100644 --- a/src/components/ContainerHomeFolders.react.js +++ b/src/components/ContainerHomeFolders.react.js @@ -41,7 +41,13 @@ var ContainerHomeFolder = React.createClass({ } }); - containerActions.update(this.props.container.Name, {Mounts: mounts}); + let binds = mounts.map(m => { + return m.Source + ':' + m.Destination; + }); + + let hostConfig = _.extend(this.props.container.HostConfig, {Binds: binds}); + + containerActions.update(this.props.container.Name, {Mounts: mounts, HostConfig: hostConfig}); } }); } else { diff --git a/src/components/ContainerSettingsPorts.react.js b/src/components/ContainerSettingsPorts.react.js index 8739bf67c2..83fbd198e8 100644 --- a/src/components/ContainerSettingsPorts.react.js +++ b/src/components/ContainerSettingsPorts.react.js @@ -39,7 +39,9 @@ var ContainerSettingsPorts = React.createClass({ // collision with ports for current container const otherContainers = _.filter(_.values(containerStore.getState().containers), c => c.Name !== this.props.container.Name); const otherPorts = _.flatten(otherContainers.map(container => { - return _.values(container.NetworkSettings.Ports).map(hosts => hosts.map(host => {return {port: host.HostPort, name: container.Name}})); + return _.values(container.NetworkSettings.Ports).map(hosts => hosts.map(host => { + return {port: host.HostPort, name: container.Name} + })); })).reduce((prev, pair) => { prev[pair.port] = pair.name; return prev; @@ -76,17 +78,18 @@ var ContainerSettingsPorts = React.createClass({ this.setState({ports: ports}); }, handleSave: function () { - let bindings = _.reduce(this.state.ports, (res, value, key) => { + let exposedPorts = {}; + let portBindings = _.reduce(this.state.ports, (res, value, key) => { res[key + '/' + value.portType] = [{ HostPort: value.port }]; + exposedPorts[key] = {}; return res; }, {}); - containerActions.update(this.props.container.Name, { - NetworkSettings: { - Ports: bindings - } - }); + + let hostConfig = _.extend(this.props.container.HostConfig, {PortBindings: portBindings}); + + containerActions.update(this.props.container.Name, {ExposedPorts: exposedPorts, HostConfig: hostConfig}); }, render: function () { if (!this.props.container) { diff --git a/src/components/ContainerSettingsVolumes.react.js b/src/components/ContainerSettingsVolumes.react.js index 8c1e615813..c6e42c2d39 100644 --- a/src/components/ContainerSettingsVolumes.react.js +++ b/src/components/ContainerSettingsVolumes.react.js @@ -31,6 +31,7 @@ var ContainerSettingsVolumes = React.createClass({ _.each(mounts, m => { if (m.Destination === dockerVol) { m.Source = util.windowsToLinuxPath(directory); + m.Driver = null; } }); @@ -38,7 +39,9 @@ var ContainerSettingsVolumes = React.createClass({ return m.Source + ':' + m.Destination; }); - containerActions.update(this.props.container.Name, {Binds: binds, Mounts: mounts}); + let hostConfig = _.extend(this.props.container.HostConfig, {Binds: binds}); + + containerActions.update(this.props.container.Name, {Mounts: mounts, HostConfig: hostConfig}); }); }, handleRemoveVolumeClick: function (dockerVol) { @@ -50,10 +53,17 @@ var ContainerSettingsVolumes = React.createClass({ _.each(mounts, m => { if (m.Destination === dockerVol) { m.Source = null; + m.Driver = 'local'; } }); - containerActions.update(this.props.container.Name, {Mounts: mounts}); + let binds = mounts.map(m => { + return m.Source + ':' + m.Destination; + }); + + let hostConfig = _.extend(this.props.container.HostConfig, {Binds: binds}); + + containerActions.update(this.props.container.Name, {Mounts: mounts, HostConfig: hostConfig}); }, handleOpenVolumeClick: function (path) { metrics.track('Opened Volume Directory', { diff --git a/src/utils/DockerUtil.js b/src/utils/DockerUtil.js index e30bc052d7..7796016b8d 100644 --- a/src/utils/DockerUtil.js +++ b/src/utils/DockerUtil.js @@ -83,21 +83,9 @@ export default { } }, - startContainer (name, containerData) { - let startopts = { - Binds: containerData.Binds || [] - }; - - if (containerData.NetworkSettings && containerData.NetworkSettings.Ports) { - startopts.PortBindings = containerData.NetworkSettings.Ports; - } else if (containerData.HostConfig && containerData.HostConfig.PortBindings) { - startopts.PortBindings = containerData.HostConfig.PortBindings; - } else { - startopts.PublishAllPorts = true; - } - + startContainer (name) { let container = this.client.getContainer(name); - container.start(startopts, (error) => { + container.start((error) => { if (error) { containerServerActions.error({name, error}); return; @@ -126,6 +114,10 @@ export default { return; } + if (!containerData.HostConfig || (containerData.HostConfig && !containerData.HostConfig.PortBindings)) { + containerData.PublishAllPorts = true; + } + containerData.Cmd = image.Config.Cmd || image.Config.Entrypoint || 'bash'; let existing = this.client.getContainer(name); existing.kill(() => { @@ -136,7 +128,7 @@ export default { return; } metrics.track('Container Finished Creating'); - this.startContainer(name, containerData); + this.startContainer(name); delete this.placeholders[name]; localStorage.setItem('placeholders', JSON.stringify(this.placeholders)); }); @@ -250,22 +242,6 @@ export default { } data.Mounts = data.Mounts || existingData.Mounts; - data.Binds = data.Mounts.map(m => m.Source + ':' + m.Destination); - - // Preserve Ports - let networking = _.extend(existingData.NetworkSettings, data.NetworkSettings); - if (networking && networking.Ports) { - let exposed = _.reduce(networking.Ports, (res, value, key) => { - res[key] = {}; - return res; - }, {}); - data = _.extend(data, { - HostConfig: { - PortBindings: networking.Ports - }, - ExposedPorts: exposed - }); - } var fullData = _.extend(existingData, data); this.createContainer(name, fullData);