【问题标题】:Docker Tutorial: Daemonized Container Closes - Syntax ErrorDocker 教程:守护进程容器关闭 - 语法错误
【发布时间】:2016-01-27 02:08:57
【问题描述】:

我一直在阅读此处链接的用户指南: Docker User Guide: Containers。 我在 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

我猜我的脚本中有语法错误,但我没有看到。任何建议表示赞赏。

This 问题有些相似,可能是相关的)。

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

EDIT2 下面接受的答案对我有用,除了我必须将“默认”附加到一些命令,以指定我正在与默认机器交谈。

【问题讨论】:

  • 您是否尝试过在实际的系统 shell 中而不是在 docker 终端中运行它?如果命令是从不保留或不理解单词边界的东西运行的,这就是你会得到的。
  • @thatotherguy 我不认为“码头工人终端”是一回事。但我想我记得在传递给 docker 的命令中看到类似的问题,并且“解析”很愚蠢。
  • 你用的是什么版本的docker?你用的是什么外壳?
  • 我使用的是 docker 版本 1.9.1。我不完全确定“shell”是什么意思,但如果有帮助的话,我正在使用 Docker 快速入门终端。
  • 您使用的是什么操作系统?你在使用虚拟机吗?

标签: shell docker syntax-error ubuntu-14.04


【解决方案1】:

尝试使用单引号:

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

注意:如mentioned here

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

但它总是在 windows 的控制台中失败(使用 Docker 快速启动终端)。

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

所以先尝试 ssh 到 docker 机器 (docker-machine ssh $(docker-machine ip <machine_name>)),然后再试一次。

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

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

【讨论】:

  • 有趣的是,docker run -d ubuntu:14.04 /bin/sh -c ' sleep infinity' docker run -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 ls 列出的 IP 尝试 docker-machine ssh
【解决方案2】:

您正在使用普通用户进行 docker build。

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

那就试试吧:

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

【讨论】:

  • 我应该提到我在 Windows 7 中执行此操作,因此使用 sudo 返回“找不到命令”错误..
猜你喜欢
  • 1970-01-01
  • 2021-11-06
  • 2019-03-15
  • 2017-05-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-16
  • 2018-04-05
相关资源
最近更新 更多