Merge pull request #1319 from docker/fix-api

Updated API calls for 1.22 and electron IPC update
This commit is contained in:
French Ben 2015-12-23 10:15:47 -05:00
Родитель a8b5b4f2de 7a3f4780c9
Коммит 14bdaf25db
5 изменённых файлов: 38 добавлений и 43 удалений

Просмотреть файл

@ -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) {

Просмотреть файл

@ -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 {

Просмотреть файл

@ -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) {

Просмотреть файл

@ -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', {

Просмотреть файл

@ -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);