/
docker.js
100 lines (88 loc) · 2.44 KB
/
docker.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
const dockerCLI = require('docker-cli-js');
const uuid = require('uuid/v4');
var docker = new dockerCLI.Docker();
var log = null;
var handle_error = function(req, res) {
return function(err) {
res.status(500).send(err);
};
};
module.exports = function(main_log) {
log = main_log;
return {
'ps': function(req, res) {
return docker.command('ps -a').then(function(data) {
log.debug('GET:', data);
res.json(data.containerList || []);
}).catch(handle_error(req, res));
},
'logs': function(req, res) {
return docker.command('logs ' + req.params.id).then(function(data) {
log.debug('GET:', req.params.id, '::', data);
res.json(data);
}).catch(handle_error(req, res));
},
'run': function(req, res) {
log.debug('PUT Request:', req.body);
if (!req.body || !req.body.image) {
return res.sendStatus(400);
}
var ports = '';
var volumes = '';
var data = '';
var detach = '';
var remove = '';
if (req.body.ports) {
for (var k in req.body.ports) {
ports += ' -p ' + k + ':' + req.body.ports[k];
}
}
if (req.body.volumes) {
for (var k in req.body.volumes) {
volumes += ' -v ' + k.replace(/^\.$/, context) + ':' + req.body.volumes[k];
}
}
if (req.body.detach) {
detach = ' --detach';
}
if (req.body.remove) {
remove = ' --rm';
}
if (req.body.data) {
data = ' ' + req.body.data;
}
return docker.command('run --name ' + (req.body.name || uuid()) + ports + volumes + remove + detach + ' ' + req.body.image + data).then(function(data) {
log.debug('PUT:', data);
res.json(data);
}).catch(handle_error(req, res));
},
'exec': function(req, res) {
log.debug('POST Request:', req.body);
var data = '';
var interactive = '';
var tty = '';
if (req.body.interactive) {
interactive = ' -i';
}
if (req.body.tty) {
tty = ' -t';
}
if (req.body.data) {
data = ' ' + req.body.data;
}
return docker.command('exec' + tty + interactive + ' ' + req.params.id + ' ' + data).then(function(data) {
log.debug('POST:', req.params.id, '::', data);
res.json(data);
}).catch(handle_error(req, res));
},
'rm': function(req, res) {
if (!req.params.id) {
return res.sendStatus(400);
}
return docker.command('rm -f ' + req.params.id).then(function(data) {
log.debug('DELETE (RM):', req.params.id, '::', data);
res.json(data);
}).catch(handle_error(req, res));
}
};
};