我一直在玩docker并通过脚本启动容器但是想尝试使用docker api并决定尝试使用dockerode。
现在,我无法将主机IP绑定到创建的容器。我如何通过http帖子将以下命令以json格式发送到Docker API?
<ul>
<li ng-repeat="a in filters.area | limitTo: 5">
<input type="checkbox" ng-change="filter()" ng-model="a.checked">
{{a.name}}
</li>
</ul>
<span>SHOW MORE</span>
我已多次阅读docker api文档,但无法找到在json帖子中传递实际IP的方法。
答案 0 :(得分:2)
所以,如果我理解了这个问题,你就是在找这样的东西......
var Docker = require("dockerode");
var fs = require("fs");
var PropertiesReader = require('properties-reader');
var properties = PropertiesReader('docker.properties');
var dockerHost = properties.get('DOCKER_HOST'); //'http://docker';
var dockerPort = properties.get('DOCKER_PORT') //2375;
var dockerImage = properties.get('DOCKER_IMAGE');
console.log("docker host/port = " + dockerHost + ":" + dockerPort);
var docker = new Docker({
host: dockerHost,
port: dockerPort
});
module.exports.CreateContainer = function(user_id, cb) {
var name = 'docker-test-' + user_id;
console.log("Create container: " + name);
docker.createContainer({
Image: dockerImage,
name: name,
ExposedPorts: {"8080/tcp": {} }
},
function (err, container) {
if (err)
throw (err);
container.start({PortBindings: {"8080/tcp": [{ "HostPort": ""}] } }, function (err, data) {
if (err)
throw (err);
console.log("Starting container");
container.inspect(function (err, data) {
if (err)
throw (err);
cb(dockerHost + ":" + data.NetworkSettings.Ports['8080/tcp'][0].HostPort);
});
});
});
}
这是我从nginx网络服务器调用的模块。主函数通过以下方式从另一个.js文件调用:
Docker.CreateContainer(user_id, function(hostInfo) {
console.log("Retrieved hostinfo: " + hostInfo);
res.json("Docker initalized on server: " + hostInfo);
});
如您所见,我将端口静音几次。不确定我真的需要这样做,但它确实有效。首先,我从图像创建容器,然后我启动它。最后,我检查容器以将详细信息返回给调用者。
我希望这会有所帮助。