【问题标题】:docker run... enter container... then every command gets "ReferenceError: <command> is not defined"docker run...进入容器...然后每个命令都得到“ReferenceError: <command> is not defined”
【发布时间】:2018-01-28 21:36:55
【问题描述】:

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

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

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 &lt;container_name/id&gt; 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?

感谢您的帮助!

【问题讨论】:

  • 关于你的第二个问题:/c/app 是否可以在你的 virtualbox 中访问?

标签: docker command-line containers volumes


【解决方案1】:

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

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

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

【讨论】:

  • 我相信它可能在 node 命令中,但我注意到当我摆脱 -it 时它运行良好,我以为我提前尝试了。这是 docker-machine 的常规设置,所以它应该为我托管一些。我一直在尝试进入设置以“共享”C 盘,但由于某种原因,我的角落里没有泊坞窗图标。
【解决方案2】:

当您运行node 镜像的默认命令时,docker 会在容器内启动交互式节点解释器。 &gt; 提示符是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

【讨论】:

  • 我只是在最后写了 bash,它把我放到了 bash 命令中,你是对的!没想到这一点,我相信约翰也提到了这一点
猜你喜欢
  • 2020-02-16
  • 1970-01-01
  • 1970-01-01
  • 2014-03-03
  • 1970-01-01
  • 2021-05-25
  • 2018-10-13
  • 2018-12-26
  • 2020-06-14
相关资源
最近更新 更多