2015-11-25 59 views
3

我一直在玩Docker并通过脚本启动容器,但想尝试Docker API并决定尝试dockerode。如何通过docker API创建和启动容器

现在,我无法设法将主机IP绑定到创建的容器。我如何将以下命令通过http post发送到以json格式的Docker API?

docker run -p my.host.ip.address:80:80 --name www.blaha.com eugeneware/docker-wordpress-nginx 

我已经通过docker api文档多次阅读并且找不到在json文章中传递实际IP的方法。

回答

1

所以,如果我理解的问题,您正在寻找这样的事情....

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的Web服务器调用。主要功能是通过另一个.js文件调用的:

Docker.CreateContainer(user_id, function(hostInfo) { 
      console.log("Retrieved hostinfo: " + hostInfo); 
      res.json("Docker initalized on server: " + hostInfo); 
     }); 

正如你所看到的,我参考了几次端口安静。不知道我真的需要这样做,但它的工作原理。首先,我从图像创建容器,然后启动它。最后,我检查容器以将详细信息返回给调用者。

我希望这会有所帮助。

相关问题