docker:$ PATH中找不到可执行文件

我有一个docker镜像安装grunt ,但是当我尝试运行它时,出现错误:

 Error response from daemon: Cannot start container foo_1: \ exec: "grunt serve": executable file not found in $PATH 

如果我在交互模式下运行bash, grunt可用。

我究竟做错了什么?

这是我的Dockerfile:

 # https://registry.hub.docker.com/u/dockerfile/nodejs/ (builds on ubuntu:14.04) FROM dockerfile/nodejs MAINTAINER My Name, me@email.com ENV HOME /home/web WORKDIR /home/web/site RUN useradd web -d /home/web -s /bin/bash -m RUN npm install -g grunt-cli RUN npm install -g bower RUN chown -R web:web /home/web USER web RUN git clone https://github.com/repo/site /home/web/site RUN npm install RUN bower install --config.interactive=false --allow-root ENV NODE_ENV development # Port 9000 for server # Port 35729 for livereload EXPOSE 9000 35729 CMD ["grunt"] 

当你使用一个命令的exec格式(例如CMD ["grunt"] ,一个带有双引号的JSON数组)时,它将在没有 shell的情况下被执行。 这意味着大多数环境variables将不会出现。

如果您将命令指定为常规string(例如CMD grunt ),那么CMD grunt之后的string将以/bin/sh -c

有关这方面的更多信息,请参阅Dockerfile参考的CMD部分。

当我粘贴我的错误信息时,这是谷歌的第一个结果,这是因为我的论点是不正确的。

容器名称必须位于所有参数之后。

坏:

 docker run <container_name> -v $(pwd):/src -it 

好:

 docker run -v $(pwd):/src -it <container_name> 

我发现了同样的问题。 我做了以下几点:

 docker run -ti devops -v /tmp:/tmp /bin/bash 

当我改变它

 docker run -ti -v /tmp:/tmp devops /bin/bash 

它工作正常。

有这样的错误有几个可能的原因。

在我的情况下,这是由于我下载后执行文件(来自Ghost博客Dockerfile的docker-entrypoint.sh )缺less可执行文件模式。

解决scheme: chmod +x docker-entrypoint.sh