You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Deno.run()执行docker命令时对cmd参数组成的疑问

Deno调用docker命令报错解决方案

Deno.run的cmd参数要求传入的数组中每一项对应执行程序的一个独立参数,它不会自动将包含空格的字符串拆分为多个参数。你之前的写法将多个参数合并为单个字符串传入,会被docker识别为无效的单参数,因此抛出未知命令的报错。

方案1:手动拆分所有参数(推荐)

这种写法没有shell注入风险,性能更好:

const VOLUME = "pgdata";
const PASSWORD = "123456";

function runCmd(s: string[]): Deno.Process {
    return Deno.run({ cmd: s, stdout: "piped", stderr: "piped" })
}

function runPg() {
    const cmd = [
        "docker",
        "run",
        "-d",
        "-v",
        `${VOLUME}:/var/lib/postgresql/data`,
        "--name",
        "pg",
        "-e",
        `POSTGRES_PASSWORD=${PASSWORD}`,
        "--rm",
        "-p",
        "5432:5432",
        "postgres"
    ];
    return runCmd(cmd);
}

方案2:通过shell执行(适合复杂命令)

如果你不想手动拆分参数,可以调用shell来解析整段命令,注意如果VOLUME、PASSWORD变量来自不可信输入,会存在shell注入风险:

function runPg() {
    const cmd = [
        "sh",
        "-c",
        `docker run -d -v ${VOLUME}:/var/lib/postgresql/data --name pg -e POSTGRES_PASSWORD=${PASSWORD} --rm -p 5432:5432 postgres`
    ];
    return runCmd(cmd);
}

内容的提问来源于stack exchange,提问作者Bing-hsu Gao

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 22:21:00