使用Dockerode以分离模式运行Docker容器

时间:2020-02-07 03:53:35

标签: javascript node.js docker detach dockerode

我正在使用Dockerode通过以下run()方法触发Docker容器的执行。请问如何在分离模式下运行它?

// Instantiate Docker
var Docker = require("dockerode");
var docker = new Docker({ socketPath: "/var/run/docker.sock" });

// Run Docker container
docker.run(
    "mobydq-scripts",
    ["python", "run.py", authorization, "test_data_source", dataSourceId.toString()],
    process.stdout,
    { name: "mobydq-test-data-source", HostConfig: { AutoRemove: true, NetworkMode: "mobydq_network" } },
    function(err, data, container) {
        // Do nothing
    }
);

1 个答案:

答案 0 :(得分:0)

我们可以按照他们的示例here

基本上,您需要创建一个容器,手动启动它,然后在其中src内运行我们自己的脚本。

贷记https://github.com/apocas/dockerode/issues/106

编辑1 :显示如何将示例应用于您的用例的示例:

<input v-if="src" type="file" name="files" :href="src"/>

您还可以查看他们的exec// Instantiate Docker var Docker = require("dockerode"); var docker = new Docker({ socketPath: "/var/run/docker.sock" }); function runExec(container) { var options = { Cmd: ["python", "run.py", authorization, "test_data_source", dataSourceId.toString()], AttachStdout: true, AttachStderr: true }; container.exec(options, function(err, exec) { if (err) return; exec.start(function(err, stream) { if (err) return; container.modem.demuxStream(stream, process.stdout, process.stderr); exec.inspect(function(err, data) { if (err) return; console.log(data); // Your code continue here }); }); }); } docker.createContainer({ Image: 'mobydq-scripts', Tty: true, Cmd: ['/bin/bash', '-c', 'tail -f /dev/null'], name: "mobydq-test-data-source", HostConfig: { AutoRemove: true, NetworkMode: "mobydq_network" } }, function(err, container) { container.start({}, function(err, data) { runExec(container); }); }); 所在的README