我有安装一个泊坞窗图像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数组用双引号),它会无壳被执行。 这意味着大多数环境变量都将不存在。
如果您指定的命令作为普通字符串(例如CMD grunt
),那么后面的字符串CMD
将被执行/bin/sh -c
。
在此更多信息是在的CMD部分提供Dockerfile参考 。
这是对谷歌的第一个结果时,我贴我的错误信息,那是因为我的论据是出故障了。
容器名称必须是经过所有参数。
坏:
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
它工作正常。
有像这样的错误的可能原因。
在我的情况,这是由于该可执行文件( docker-entrypoint.sh
从鬼博客Dockerfile )缺乏可执行文件模式我已经下载了之后。
解决方法: chmod +x docker-entrypoint.sh
泊坞窗容器可能无壳建造(如https://github.com/fluent/fluent-bit-docker-image/issues/19 )。
在这种情况下,您可以复制在静态编译外壳并执行它,如
docker pull busybox
docker create --name temp-busybox busybox
docker cp temp-busybox:/busybox busybox
docker cp busybox mycontainerid:/busybox
docker exec -it mycontainerid /bin/busybox sh
出于某种原因,我得到这个错误,除非我添加了“打击”澄清。 即使加上“#!/斌/ bash的”我的入口点文件没有帮助的顶部。
ENTRYPOINT [ "bash", "entrypoint.sh" ]