如何通过docker API创建和启动容器

时间:2015-11-25 14:03:26

标签: docker docker-api

我一直在玩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的方法。

1 个答案:

答案 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);
         });

如您所见,我将端口静音几次。不确定我真的需要这样做,但它确实有效。首先,我从图像创建容器,然后我启动它。最后,我检查容器以将详细信息返回给调用者。

我希望这会有所帮助。