diff --git a/src/ContainerHomeFolders.react.js b/src/ContainerHomeFolders.react.js
index 513cc974b5..1ace6d4e90 100644
--- a/src/ContainerHomeFolders.react.js
+++ b/src/ContainerHomeFolders.react.js
@@ -2,19 +2,38 @@ var _ = require('underscore');
var React = require('react/addons');
var RetinaImage = require('react-retina-image');
var path = require('path');
-var exec = require('exec');
+var shell = require('shell');
+var util = require('./Util');
var metrics = require('./Metrics');
var Router = require('react-router');
+var ContainerStore = require('./ContainerStore');
var ContainerHomeFolder = React.createClass({
mixins: [Router.State, Router.Navigation],
- handleClickFolder: function (path) {
+ handleClickFolder: function (hostVolume, containerVolume) {
metrics.track('Opened Volume Directory', {
from: 'home'
});
- exec(['open', path], function (err) {
- if (err) { throw err; }
- });
+
+ if (hostVolume.indexOf(process.env.HOME) === -1) {
+ var volumes = _.clone(this.props.container.Volumes);
+ var newHostVolume = path.join(util.home(), 'Kitematic', this.props.container.Name, containerVolume);
+ volumes[containerVolume] = newHostVolume;
+ var binds = _.pairs(volumes).map(function (pair) {
+ return pair[1] + ':' + pair[0];
+ });
+ ContainerStore.updateContainer(this.props.container.Name, {
+ Binds: binds
+ }, function (err) {
+ if (err) {
+ console.log(err);
+ return;
+ }
+ shell.showItemInFolder(newHostVolume);
+ });
+ } else {
+ shell.showItemInFolder(hostVolume);
+ }
},
handleClickChangeFolders: function () {
metrics.track('Viewed Volume Settings', {
@@ -23,24 +42,21 @@ var ContainerHomeFolder = React.createClass({
this.transitionTo('containerSettingsVolumes', {name: this.getParams().name});
},
render: function () {
- var folders;
- if (this.props.container) {
- var self = this;
- folders = _.map(self.props.container.Volumes, function (val, key) {
- var firstFolder = key.split(path.sep)[1];
- if (!val || val.indexOf(process.env.HOME) === -1) {
- return;
- } else {
- return (
-
- );
- }
- });
+ if (!this.props.container) {
+ return false;
}
- if (this.props.container && this.props.container.Volumes && _.keys(this.props.container.Volumes).length > 0 && this.props.container.State.Running) {
+
+ var folders = _.map(this.props.container.Volumes, (val, key) => {
+ var firstFolder = key.split(path.sep)[1];
+ return (
+
+ );
+ });
+
+ if (this.props.container.Volumes && _.keys(this.props.container.Volumes).length > 0 && this.props.container.State.Running) {
return (
Edit Files
@@ -51,9 +67,7 @@ var ContainerHomeFolder = React.createClass({
);
} else {
- return (
-
- );
+ return false;
}
}
});
diff --git a/src/ContainerSettingsVolumes.react.js b/src/ContainerSettingsVolumes.react.js
index 32e699449e..cb470e75aa 100644
--- a/src/ContainerSettingsVolumes.react.js
+++ b/src/ContainerSettingsVolumes.react.js
@@ -31,6 +31,21 @@ var ContainerSettingsVolumes = React.createClass({
}
});
},
+ handleRemoveVolumeClick: function (dockerVol) {
+ metrics.track('Removed Volume Directory', {
+ from: 'settings'
+ });
+ var volumes = _.clone(this.props.container.Volumes);
+ delete volumes[dockerVol];
+ var binds = _.pairs(volumes).map(function (pair) {
+ return pair[1] + ':' + pair[0];
+ });
+ ContainerStore.updateContainer(this.props.container.Name, {
+ Binds: binds
+ }, function (err) {
+ if (err) { console.log(err); }
+ });
+ },
handleOpenVolumeClick: function (path) {
metrics.track('Opened Volume Directory', {
from: 'settings'
@@ -50,6 +65,7 @@ var ContainerSettingsVolumes = React.createClass({
No Folder
Change
+ Remove
);
} else {
@@ -57,6 +73,7 @@ var ContainerSettingsVolumes = React.createClass({
{val.replace(process.env.HOME, '~')}
Change
+ Remove
);
}
diff --git a/src/ContainerStore.js b/src/ContainerStore.js
index 121033316f..cb394f1593 100644
--- a/src/ContainerStore.js
+++ b/src/ContainerStore.js
@@ -1,14 +1,12 @@
var _ = require('underscore');
var EventEmitter = require('events').EventEmitter;
var async = require('async');
-var path = require('path');
var assign = require('object-assign');
var docker = require('./Docker');
var metrics = require('./Metrics');
var registry = require('./Registry');
var logstore = require('./LogStore');
var bugsnag = require('bugsnag-js');
-var util = require('./Util');
var _placeholders = {};
var _containers = {};
@@ -92,38 +90,22 @@ var ContainerStore = assign(Object.create(EventEmitter.prototype), {
},
_startContainer: function (name, containerData, callback) {
var self = this;
- docker.client().getImage(containerData.Image).inspect(function (err, data) {
+ var binds = containerData.Binds || [];
+ 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;
}
- 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);
- });
+ self.fetchContainer(name, callback);
});
},
_createContainer: function (name, containerData, callback) {
@@ -137,6 +119,9 @@ var ContainerStore = assign(Object.create(EventEmitter.prototype), {
if (containerData.Config && containerData.Config.Image) {
containerData.Image = containerData.Config.Image;
}
+ if (containerData.Config && containerData.Config.Env) {
+ containerData.Env = containerData.Config.Env;
+ }
existing.kill(function () {
existing.remove(function () {
docker.client().createContainer(containerData, function (err) {
@@ -144,11 +129,7 @@ var ContainerStore = assign(Object.create(EventEmitter.prototype), {
callback(err, null);
return;
}
- if (containerData.State && !containerData.State.Running) {
- self.fetchContainer(containerData.name, callback);
- } else {
- self._startContainer(name, containerData, callback);
- }
+ self._startContainer(name, containerData, callback);
});
});
});