5

这发生在多个命令变体中。 基本上...... 首先我运行容器: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 在后台运行)并重新打开终端。我现在可以使用:进入容器 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 上运行 virtualbox 吗?

感谢您的任何帮助!

4

2 回答 2

14

根本不是节点人,但是如果您查看node:latest Dockerfile,您会发现CMD执行的默认值是"node". 所以我猜你正被放入某种 Node REPL 中,这些 shell 命令将不起作用。这也是为什么exec ... bash有效,你在bash,不是node

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

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

于 2017-08-20T20:42:48.300 回答
3

当您运行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
于 2017-08-20T20:43:12.473 回答