Shell Docker教程:守护容器关闭-语法错误

Shell Docker教程:守护容器关闭-语法错误,shell,docker,syntax-error,ubuntu-14.04,Shell,Docker,Syntax Error,Ubuntu 14.04,我一直在浏览链接到此处的用户指南: . 我在docker终端中运行了以下命令: $ docker run -d ubuntu:14.04 /bin/sh -c "while true; do echo hello world; sleep 1; done" 这将创建一个在后台运行的容器。但是,当我查看它是否正在运行时,请使用: $ docker ps -a 它显示容器已创建但已停止运行。 容器的日志包含以下内容: true;: 1: true;: Syntax error: end of f

我一直在浏览链接到此处的用户指南: . 我在docker终端中运行了以下命令:

$ docker run -d ubuntu:14.04 /bin/sh -c "while true; do echo hello world; sleep 1; done"
这将创建一个在后台运行的容器。但是,当我查看它是否正在运行时,请使用:

$ docker ps -a
它显示容器已创建但已停止运行。 容器的日志包含以下内容:

true;: 1: true;: Syntax error: end of file unexpected
在不尝试创建守护进程的情况下运行命令会产生类似的结果:

$  docker run ubuntu:14.04 /bin/sh -c "while true; do echo hello world; sleep 1; done"
true;: 1: true;: Syntax error: end of file unexpected
我猜我的脚本中有语法错误,但我没有看到。如有任何建议,我们将不胜感激

(问题有点类似,可能是相关的)

编辑一些附加信息:我正在Windows7中运行Docker,使用Docker快速启动终端


EDIT2下面被接受的答案对我来说很有用,除了我必须在许多命令后面附加“default”来指定我正在和默认机器对话。

您正在使用普通用户进行docker构建

对于shell脚本,您应该使用根帐户

因此,请尝试:

sudo docker run -d ubuntu:14.04 /bin/sh -c "while true; do echo hello world; sleep 1; done"

请尝试使用单引号:

docker run -d ubuntu:14.04 /bin/sh -c 'while true; do echo hello world; sleep 1; done'
注:作为:

当我尝试使用VirtualBox的控制台时,一切都很好

但它总是在windows控制台中失败(使用Docker Quickstart终端)

我认为问题在于行尾代码(
\n
\r
\r\n

因此,请首先尝试ssh到docker机器(
docker机器ssh$(docker机器ip)
),然后重试

对于最近创建机器“
default
”的docker机器,您甚至不必键入任何内容(这里我使用
dm
作为
docker机器的别名):

然后,该命令使用单引号或双引号:


您是否尝试过在实际的系统外壳中而不是在docker终端中运行它?如果命令是从一个不保留或不理解单词边界的地方运行的,你会得到这样的结果。@另一个家伙,我不认为“docker terminal”是个东西。但是我想我记得在传递给docker的命令中看到了类似的问题,“解析”很愚蠢。你使用的是什么版本的docker?你用的是什么shell?我用的是docker版本1.9.1。我不完全确定“shell”是什么意思,但如果有帮助的话,我使用的是Docker Quickstart终端。你使用的是什么操作系统?你使用的是虚拟机吗?有趣的是,
docker-run-d ubuntu:14.04/bin/sh-c“sleep infinity”
docker-d ubuntu:14.04/bin/sh-c“sleep infinity”
都很好,所以可能更短的形式更好,因为我们不必关心单引号,或者我还没有尝试过ssh的东西。但是,带单引号的命令会给出与以前相同的错误消息。@user30632因此我建议先使用ssh。我尝试了以下操作:
$docker machine ssh$(docker machine ip default)
。输出表明主机不存在。但是,当我运行
$docker machine ls
时,会列出默认计算机。@user30632然后使用docker machine lsI应该提到的我在Windows 7中执行此操作的IP尝试docker machine ssh,因此使用sudo返回“command not found”错误。。