docker run... enter container... then every command gets "ReferenceError: <command> is not defined"

docker run... enter container... then every command gets "ReferenceError: <command> is not defined"

这发生在多个命令变体中。 基本上... 首先我运行容器:docker run -it --publish 8080:8080 --name app_in_docker node:latest

然后几秒钟后我在下一行中得到了这个响应: > 这使我看起来像是在容器中,即使命令行通常如下所示: root@bcb5705c09c1:/# 当我在容器中时。 我在 > 中输入的任何内容都会显示:

ReferenceError: <command> is not defined
    at repl:1:1
    at ContextifyScript.Script.runInThisContext (vm.js:44:33)
    at REPLServer.defaultEval (repl.js:239:29)
    at bound (domain.js:301:14)
    at REPLServer.runBound [as eval] (domain.js:314:12)
    at REPLServer.onLine (repl.js:440:10)
    at emitOne (events.js:120:20)
    at REPLServer.emit (events.js:210:7)
    at REPLServer.Interface._onLine (readline.js:279:10)
    at REPLServer.Interface._line (readline.js:626:8)

我使用了 ls、cd、exit、help、--help、WORKDIR、docker、error 等命令,但都没有成功,我得到了相同的消息。

然后我关闭 docker quickstart 终端(我在后台使用 windows 和 virtualbox 运行s)并重新打开终端。我现在可以使用以下方法进入容器: docker exec -it <container_name/id> bash 命令行现在看起来应该是:root@bcb5705c09c1:/#

第二个半相关问题如果你能帮忙!如何在我的计算机中指定卷路径?我没有像这样合并卷:docker run -it -v /c/app:/usr/src/app --publish 8080:8080 --name app_in_docker node:latest 尝试连接到 C:\app 文件夹中的文件。这可能是因为我在 windows 上 运行ning virtualbox?

感谢您的帮助!

根本不是节点专家,但是如果您查看 node:latest Dockerfile,您会发现执行的默认 CMD"node"。所以我猜你正在陷入某种节点 REPL,其中那些 shell 命令将不起作用。这也是 exec ... bash 有效的原因,你在 bash,而不是 node

如果您是第一次想要这种行为,只需将 bash 放在 docker run ... 命令的末尾,它将覆盖 Docker 文件中定义的默认值。

第二个问题,是的,这可能是因为您 运行 在 Windows 上的 Virtualbox 中。它只是一个常规设置吗?或 Docker-Machine(为您安装一些主机文件夹)或 Docker for Windows(这又是另一回事)。

当您运行 node 图像的默认命令时,docker 启动容器内的交互式节点解释器。 >提示是node的默认提示。您的命令等同于

docker run -it --publish 8080:8080 --name app_in_docker node:latest node

如果你想在节点镜像中使用像lscd这样的命令,你应该在容器中启动bash

docker run -it --publish 8080:8080 --name app_in_docker node:latest bash