容器正在产生,但是当产生多个docker容器时,发出的命令失败

我们有一个自定义的Chrome扩展,可以执行一些与Web相关的任务。 这些任务需要是唯一的,因此我们继续在运行chrome的单个docker容器上运行每个任务的概念

我们目前有4个ec2实例(c4.2xlarge)运行ubuntu,然后在docker容器中使用chrome。

我们还有一个更小的ec2实例,它从mongodb中读取任务并将它们分配给一个接一个地填充它们的服务器。 所以如果一个任务被添加,它将被分配给其中一个实例,然后select它,创build一个容器执行任务,然后销毁该容器。 每项任务大概需要2到6分钟才能完成。 我们使用dockerode在nodejs中dynamic地创build和销毁容器。

我们做了很多的基准testing,得出每台服务器最多可以运行55个任务的结论,所以我们设定了每个服务器最多45个任务的阈值,以保证安全。

这是在所有4个实例上运行的代码的一部分

function start_polling_mongo() { Tasks.find({ server_id: instance_id, task_status: 1 }, function(err, all_tasks) { //update the tasks Tasks.update({ _id: { "$in": all_tasks } }, { task_status: 2 }, { multi: true }, function(err) { //perform the tasks all_tasks.forEach(function(task) { setTimeout(function() { run_task_in_container(task.task_id); }, 1000); }); }); }); setTimeout(start_polling_mongo, 5000); } function run_task_in_container(task_id) { console.log('Running Task id : ' + task_id); var commands = ''; commands += 'Xvfb :99 & '; commands += 'export DISPLAY=:99 & '; commands += 'x11vnc -rfbport ' + task_id + ' -display :99 -bg -q & '; commands += 'google-chrome --no-first-run --load-extension=/home/chrome_extension http://www.example.com/search?q=perform_task-' + task_id; var exposed_ports = {}; exposed_ports[task_id + '/tcp'] = {}; var port_bindings = {}; port_bindings[task_id + '/tcp'] = [{ HostPort: task_id.toString() }] docker.createContainer({ Image: 'docker-chrome-final', ExposedPorts: exposed_ports, Cmd: ['bash', '-c', commands], Labels: { "task_id": task_id.toString() } }, function(err, container) { if (err) { console.log('error1 :'); console.log(err); return; } container.start({ Privileged: true, PortBindings: port_bindings }, function(err, data) { if (err) { console.log('error2 :'); console.log(err); return; } }); }); } 

问题是,一批150到180个任务有创build和启动的随机容器,但铬不在同一个(每个服务器上2-3个容器)上运行。 我证实,通过成功VNC进入服务器将显示一个黑屏(XVFB)。

任何input是高度赞赏!