Merge pull request #208 from kitematic/bug-fixes

Fix minor bugs
This commit is contained in:
Jeffrey Morgan 2015-03-02 20:22:16 -05:00
commit 643d705d2d
3 changed files with 61 additions and 45 deletions

View File

@ -97,8 +97,7 @@ var ContainerDetailsSubheader = React.createClass({
handleRestart: function () { handleRestart: function () {
if (!this.disableRestart()) { if (!this.disableRestart()) {
metrics.track('Restarted Container'); metrics.track('Restarted Container');
ContainerStore.restart(this.props.container.Name, function (err) { ContainerStore.restart(this.props.container.Name, function () {
console.log(err);
}); });
} }
}, },

View File

@ -6,8 +6,9 @@ var assign = require('object-assign');
var docker = require('./Docker'); var docker = require('./Docker');
var metrics = require('./Metrics'); var metrics = require('./Metrics');
var registry = require('./Registry'); var registry = require('./Registry');
var LogStore = require('./LogStore'); var logstore = require('./LogStore');
var bugsnag = require('bugsnag-js'); var bugsnag = require('bugsnag-js');
var util = require('./Util');
var _placeholders = {}; var _placeholders = {};
var _containers = {}; var _containers = {};
@ -89,6 +90,42 @@ var ContainerStore = assign(Object.create(EventEmitter.prototype), {
}); });
}); });
}, },
_startContainer: function (name, containerData, callback) {
var self = this;
docker.client().getImage(containerData.Image).inspect(function (err, data) {
if (err) {
callback(err);
return;
}
var binds = containerData.Binds || [];
if (data.Config.Volumes) {
_.each(data.Config.Volumes, function (value, key) {
var existingBind = _.find(binds, b => {
return b.indexOf(':' + key) !== -1;
});
if (!existingBind) {
binds.push(path.join(util.home(), 'Kitematic', name, key)+ ':' + key);
}
});
}
var startopts = {
Binds: binds
};
if (containerData.NetworkSettings && containerData.NetworkSettings.Ports) {
startopts.PortBindings = containerData.NetworkSettings.Ports;
} else{
startopts.PublishAllPorts = true;
}
var container = docker.client().getContainer(name);
container.start(startopts, function (err) {
if (err) {
callback(err);
return;
}
self.fetchContainer(name, callback);
});
});
},
_createContainer: function (name, containerData, callback) { _createContainer: function (name, containerData, callback) {
var existing = docker.client().getContainer(name); var existing = docker.client().getContainer(name);
var self = this; var self = this;
@ -102,23 +139,7 @@ var ContainerStore = assign(Object.create(EventEmitter.prototype), {
} }
existing.kill(function () { existing.kill(function () {
existing.remove(function () { existing.remove(function () {
docker.client().getImage(containerData.Image).inspect(function (err, data) { docker.client().createContainer(containerData, function (err) {
if (err) {
callback(err);
return;
}
var binds = containerData.Binds || [];
if (data.Config.Volumes) {
_.each(data.Config.Volumes, function (value, key) {
var existingBind = _.find(binds, b => {
return b.indexOf(':' + key) !== -1;
});
if (!existingBind) {
binds.push(path.join(process.env.HOME, 'Kitematic', containerData.name, key)+ ':' + key);
}
});
}
docker.client().createContainer(containerData, function (err, container) {
if (err) { if (err) {
callback(err, null); callback(err, null);
return; return;
@ -126,23 +147,8 @@ var ContainerStore = assign(Object.create(EventEmitter.prototype), {
if (containerData.State && !containerData.State.Running) { if (containerData.State && !containerData.State.Running) {
self.fetchContainer(containerData.name, callback); self.fetchContainer(containerData.name, callback);
} else { } else {
var startopts = { self._startContainer(name, containerData, callback);
Binds: binds
};
if (containerData.NetworkSettings && containerData.NetworkSettings.Ports) {
startopts.PortBindings = containerData.NetworkSettings.Ports;
} else{
startopts.PublishAllPorts = true;
} }
container.start(startopts, function (err) {
if (err) {
callback(err);
return;
}
self.fetchContainer(containerData.name, callback);
});
}
});
}); });
}); });
}); });
@ -361,7 +367,7 @@ var ContainerStore = assign(Object.create(EventEmitter.prototype), {
data.name = data.Name; data.name = data.Name;
} }
if (name !== data.name) { if (name !== data.name) {
LogStore.rename(name, data.name); logstore.rename(name, data.name);
} }
var fullData = assign(_containers[name], data); var fullData = assign(_containers[name], data);
this._createContainer(name, fullData, function () { this._createContainer(name, fullData, function () {
@ -371,7 +377,7 @@ var ContainerStore = assign(Object.create(EventEmitter.prototype), {
}.bind(this)); }.bind(this));
}, },
rename: function (name, newName, callback) { rename: function (name, newName, callback) {
LogStore.rename(name, newName); logstore.rename(name, newName);
docker.client().getContainer(name).rename({name: newName}, err => { docker.client().getContainer(name).rename({name: newName}, err => {
if (err && err.statusCode !== 204) { if (err && err.statusCode !== 204) {
callback(err); callback(err);
@ -385,8 +391,19 @@ var ContainerStore = assign(Object.create(EventEmitter.prototype), {
}, },
restart: function (name, callback) { restart: function (name, callback) {
var container = docker.client().getContainer(name); var container = docker.client().getContainer(name);
container.restart(function (err) { _muted[name] = true;
container.stop(err => {
if (err && err.statusCode !== 304) {
_muted[name] = false;
callback(err); callback(err);
} else {
var data = _containers[name];
this._startContainer(name, data, err => {
_muted[name] = false;
this.emit(this.CLIENT_CONTAINER_EVENT, name, 'start');
callback(err);
});
}
}); });
}, },
remove: function (name, callback) { remove: function (name, callback) {

View File

@ -79,7 +79,7 @@ var DockerMachine = {
return util.exec([DockerMachine.command(), 'rm', '-f', NAME]); return util.exec([DockerMachine.command(), 'rm', '-f', NAME]);
}, },
ip: function () { ip: function () {
return util.exec([DockerMachine.command(), 'ip']).then(stdout => { return util.exec([DockerMachine.command(), 'ip', NAME]).then(stdout => {
return Promise.resolve(stdout.trim().replace('\n', '')); return Promise.resolve(stdout.trim().replace('\n', ''));
}); });
}, },