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

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (96)

我有一个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的情况下执行。这意味着大多数环境变量将不存在。

如果你将命令指定为常规字符串(例如CMD grunt),那么之后的字符串CMD将被执行/bin/sh -c

用户回答回答于

容器名称必须在所有的参数之后。

不好:

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

好:

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

扫码关注云+社区

领取腾讯云代金券