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
如果你想在节点镜像中使用像ls
或cd
这样的命令,你应该在容器中启动bash
。
docker run -it --publish 8080:8080 --name app_in_docker node:latest bash
这发生在多个命令变体中。
基本上...
首先我运行容器: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
如果你想在节点镜像中使用像ls
或cd
这样的命令,你应该在容器中启动bash
。
docker run -it --publish 8080:8080 --name app_in_docker node:latest bash