docker运行…input容器…然后每个命令得到“ReferenceError:<command>未定义”

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

然后我在几秒钟后在下一行中有这个响应: >这使得我看起来在容器中,即使命令行通常如下所示: root@bcb5705c09c1:/#当我在容器中。 任何我input这个>然而显示这个:

 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等命令,没有任何成功,我得到了同样的信息。

然后,我只closuresdocker快速入门terminal(我使用的是windows和virtualbox在后台运行)并重新打开terminal。 我现在可以进入容器使用: docker exec -it <container_name/id> bash和命令行现在看起来应该: root@bcb5705c09c1:/#

第二个半相关的问题,如果你能帮助! 如何在我的电脑中指定音量path? 我没有成功地合并音量,如下所示: docker run -it -v /c/app:/usr/src/app --publish 8080:8080 --name app_in_docker node:latest试图连接到C:\应用文件夹。 可能是因为我在windows上运行virtualbox?

感谢您的任何帮助!

根本不是一个节点的人,但是如果你看看node:latest Dockerfile,你会发现执行的默认CMD"node" 。 所以我猜你正在被放到某种Node REPL中,那些shell命令不起作用。 这也是为什么exec ... bash确实工作,你在bash ,而不是node

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

第二个问题,是的,这可能是因为你在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