【问题标题】:docker-compose on Windows - Container command 'sh' not found or does not existWindows 上的 docker-compose - 找不到或不存在容器命令“sh”
【发布时间】:2016-10-23 00:23:40
【问题描述】:

让 docker 在 windows 主机上运行时遇到一些奇怪的问题,但在 linux 主机上却很好。它只是一个可以运行 gulp 的简单节点容器(最终将附加到其他 LAMP 等容器)。

我的 docker-compose.yml

version: '2'
services:
 node:
  build: ./node
  container_name: cont_node
  ports:
  - "35733:35733"
  volumes:
  - ~/docker/project/www:/var/www/html/
  command: "sh -c 'npm install && bower install && gulp'"

我的 Dockerfile

FROM node:4-onbuild

RUN npm config set registry http://registry.npmjs.org/

# Define working directory.
WORKDIR /var/www/html/

COPY ./package.json /var/www/html/

RUN npm install -g gulp-cli

CMD ["bash"]

所以当我跑步时

docker-compose up node

它返回

Container command 'sh' not found or does not exist.

既然我理解command 命令在容器(而不是主机)上运行,这应该没问题吗?我也用/bin/sh 试过了,也遇到了同样的问题。 /bin/sh 确实存在,如果相关的话,似乎是指向 dash 的符号链接?看起来与我的 linux 主机完全相同。

有什么想法吗?

附带说明,每当我在 linux 主机上使用 docker 时,它的运行就像做梦一样,但是 windows 我总是浪费时间来解决 windows 特定问题,npm 安装似乎无法正常工作或挂起或需要很长时间,我的文档中没有卷的问题等。Windows / boot2docker 上的 docker 是 fubar'ed 还是只有我?

【问题讨论】:

  • @PanagiotisKanavos 不是 command 在撰写中只是在容器上运行它?不在主机上? docs.docker.com/compose/compose-file/#command
  • 对于它的价值,我在 linux 上旋转了它,让 /bin/sh 在那里工作没有任何问题。由于我没有有效的 package.json,我的测试停止了。
  • @BMitch 感谢您的尝试!我让它在 linux 上也能正常工作,这很烦人,为什么 windows 不能玩得很好:( 如果它抱怨没有 package.json 它比我做得更远
  • @Horse 您是直接从 Windows 使用 docker-compose,还是通过 ssh 会话从 docker-machine VM 使用?
  • @VonC 直接从 docker windows 终端,我会尝试 ssh 并稍后从 docker-machine 尝试,看看有什么不同

标签: windows docker sh


【解决方案1】:

在 Windows 10 和 Docker for Windows beta 上运行良好。我会说要么是过时的 Docker 设置,要么是你的机器上出现了一些问题。如果您仍在运行 boot2docker,请尝试切换到 Docker for Windows

附带说明一下,每当我从 linux 主机上使用 docker 时,它的运行就像做梦一样,但是 windows 我总是浪费几个小时来解决 windows 特定问题,npm 安装似乎无法正常工作或挂起或需要很长时间,卷问题不在我的文档中,等等。Windows / boot2docker 上的 docker 是 fubar'ed 还是只有我?

好吧,Windows 总是给几乎任何东西带来一些痛苦:p,在 boot2docker 的早期,Windows 支持相当有缺陷/不完整,但随着最新的 Docker for Windows 版本,事情现在运行得非常顺利。

【讨论】:

  • 好的,感谢您的检查! :) 我仍在 W7 上,并且认为 Windows 的新 docker 仅适用于 W10(嘘!:P),但我会尽快玩,然后接受这个答案
  • 昨天玩了一会,结果只是在 virtualbox 上安装了一个 Linux 发行版,然后直接在上面安装了 docker。 W7 上的本机 docker 并不能很好地发挥作用,而且完全可以通过 ssh 连接到桥接的 vbox 中。我觉得这有点搞笑,这就是 docker for windows 所做的事情,但它仍然没有做对,但无论如何,感谢您的回答和确认它适用于新的 docker。可惜这只是W10。接受你的回答:)
【解决方案2】:

(发布此作为答案,因为我没有足够的代表发表评论)

出于某种原因,Docker 尝试在主机而不是来宾中运行命令。既然它说的是“容器命令”,您实际上可能想在它前面加上“运行”,如the online reference

【讨论】:

  • 感谢您的输入,但我认为它引用了主要的docker run。在前面加上run 只会给我Container command 'run' not found or does not exist.
  • yml 文件中的docker-compose command,应该在容器上执行该命令吗?例如 - docs.docker.com/compose/compose-file/#command
  • 那就奇怪了。安装可能会中断。
  • 我的意思是,容器本身可能已损坏。如果存在,那么它可能不在PATH中(给出abs.path)
  • 感谢@paul-stelian 的输入,但正如 OP 中所述,已经尝试过 :( 真的很奇怪。我已经从头开始重新创建了几次容器。
猜你喜欢
  • 2018-11-13
  • 1970-01-01
  • 2016-05-25
  • 1970-01-01
  • 2022-01-14
  • 2021-06-12
  • 1970-01-01
  • 2019-04-12
  • 1970-01-01
相关资源
最近更新 更多