【问题标题】:Use docker run command to initialize a project使用 docker run 命令初始化一个项目
【发布时间】:2023-02-04 07:46:16
【问题描述】:

我正在寻找一种使用 docker run 命令初始化项目的方法。我将使用节点作为示例。

试图

这是我试过的命令。

docker run --rm -it -v "$PWD":/usr/app -w "/usr/app" --name foo_bar node:lts "npm init"

然而,这会导致此错误。

node:internal/modules/cjs/loader:1050
throw err;
^

Error: Cannot find module '/npm init'
at Module._resolveFilename (node:internal/modules/cjs/loader:1047:15)
at Module._load (node:internal/modules/cjs/loader:893:27)
at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:81:12)
at node:internal/main/run_main_module:23:47 {
code: 'MODULE_NOT_FOUND',
requireStack: []
}

Node.js v18.14.0

不确定为什么它会抱怨'/npm init',所以也欢迎解释这里到底出了什么问题。

预期结果

npm init cli 工具将开始要求我设置项目名称、版本等,以下输出将位于我当前的输出目录中。

我尝试了命令的变体

docker run --rm -it -v "$PWD":/usr/app -w "/usr/app" --name foo_bar node:lts bash

这将我连接到我运行 npm init 以创建有效项目的容器,但我想一次性完成这些。

【问题讨论】:

  • 没有引号 "npm init" 它按预期工作 docker run --rm -it -v "$PWD":/usr/app -w "/usr/app" --name foo_bar node:lts npm init

标签: node.js docker


【解决方案1】:

docker container run 具有以下语法

$ docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

当您将命令及其参数用引号括起来时,它被视为单个命令,即 "npm init" 被视为命令 (COMMAND = npm init) 而不是被解析为 COMMAND = npm;参数 = 初始化。

考虑以下示例:


现在,为什么“npm init”会给出错误 Error: Cannot find module '/npm init' 而不是找不到命令.这是因为node:lts 图像的构建方式。如果您查看底部的 node's Dockerfile on github,则有两行。

ENTRYPOINT ["docker-entrypoint.sh"]

CMD [ "node" ]

节点图像的入口点执行“docker-entrpoint.sh”文件,它的参数是“节点”。在检查docker-entrypoint.sh

有评论

# Run command with node if the first argument contains a "-" or is not a system command.

这就是为什么当你写“npm init”时你会得到 Module not found 错误的原因,因为它不是系统命令,它是用 node 运行的。但是当它是系统命令时,它会按原样执行。

【讨论】:

    猜你喜欢
    • 2018-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-13
    • 1970-01-01
    相关资源
    最近更新 更多