0

更新

我想我需要使用 .run 而不是 .createContainer

我得到了命令在没有安装的情况下工作但是我不确定如何将 docker 容器绑定到我的 cwd

    docker.run("wpscanteam/wpscan", [
        // "--mount",
        // "type=bind,source=" + process.cwd() + "/docker-bind,target=/output",
        // "-o",
        // "/output/wpscan-output.json",
        "--format",
        "json",
        "--url",
        "https://example.com/",
    ], process.stdout, function (err, data, container) {
        console.log(data.StatusCode);
    })

如果未注释,注释的行 (2-6) 会导致错误Scan Aborted: invalid option: --mount

我被允许添加这些创建参数,我认为我需要使用volume,但我不确定。

OG邮报

我正在尝试使用dockerode来执行这个 docker 命令docker run --rm --mount type=bind,source=$HOME/docker-bind,target=/output wpscanteam/wpscan:latest -o /output/wpscan-output.json --format json --url 'https://example.com/'

这是我尝试过的,但是当我运行它时,它使容器具有正确的命令,但是它(几乎)立即退出,并且当我docker container inspect创建的容器没有安装的卷时

我不确定Mount我应该使用正确的参数,但我认为这不是问题所在,因为 docker 实例在 <.5secs 内停止,当我在 WSL 中运行命令时,运行大约需要 10 秒,所以我不要认为我的cmd:[]论点正在执行。

docker.createContainer({
        Image: 'wpscanteam/wpscan',
        AttachStdin: false,
        AttachStdout: true,
        AttachStderr: true,
            Mounts:
                [
                    {
                        "Type": "bind",
                        "Source": process.cwd() + "/docker-bind",
                        "Destination": "/output",
                    }
                ],
        Tty: false,
        Cmd: [
            "-o",
            "/output/wpscan-output.json",
            "--format",
            "json",
            "--url",
            "https://example.com/"
        ],
        OpenStdin: false,
        StdinOnce: false
    }, (err, container)=>{
        container.start(function (err, data) {
            console.log(data)
            console.log(err)
        })
    })

当我在 WSL 2 中运行此命令docker run --rm --mount type=bind,source=$HOME/docker-bind,target=/output wpscanteam/wpscan:latest -o /output/wpscan-output.json --format json --url 'https://example.com/' 时,它可以完美地将 JSON 放置在我磁盘上的 docker-bind 文件夹中。

将此命令转换为我使用的 dockerodeprocess.cwd()而不是 $HOME 时,因为 $HOME 是 WSL 功能。(我的项目目录中也有该docker-bind文件夹,所以这应该不是问题)

我对 docker 非常有经验,但这超出了我的专业知识。

tl; dr 我有一个 docker 命令,我需要将输出放入我的项目目录中的文件夹中。它需要能够使用 Node.js 运行

如果有更好的库得到很好的支持,请告诉我。

Docker Docs为您提供方便 (1.42)

4

1 回答 1

0

这是我用来回答的

docker.run("wpscanteam/wpscan", [
            "-o",
            "/output/wpscan-output.json",
            "--format",
            "json",
            "--url",
            "https://example.com/",
        ], process.stdout, {
        HostConfig:{
            Binds:[
                process.cwd() + "/docker-bind:/output"
            ]
        }
        }, function (err, data, container) {
            console.log(data.StatusCode);
        }
    )
于 2021-02-28T10:34:09.793 回答