Docker与Bower、Grunt的结合

4
我正在尝试使用grunt和bower构建docker镜像,但是我遇到了以下异常。 2015/01/19 23:21:55命令[/bin/sh -c grunt]返回非零代码:1 bower也打印类似的异常。 我的Dockerfile如下。 问题可能在哪里?
FROM    ubuntu:14.04

RUN     apt-get update
RUN     apt-get install -y node npm git git-core
RUN     ln -s /usr/bin/nodejs /usr/bin/node
COPY    . /app

WORKDIR /app

RUN     npm install -g bower 
RUN     npm install -g grunt-cli
RUN     npm install 
# RUN     bower install 
RUN     grunt 
RUN     grunt serve
EXPOSE  9000

顺便说一下,我并没有完全掌握docker的知识。我通过以下方式进入镜像:

docker run -t -i a87274a7f3b7  /bin/bash

并且仅仅运行

grunt

但什么都没有发生,它什么也不做,也没有给出任何错误信息。

编辑 这个似乎能正常工作。

FROM    ubuntu:14.04

RUN     apt-get update
RUN     apt-get install -y nodejs npm git git-core
RUN     ln -s /usr/bin/nodejs /usr/bin/node
COPY    . /app

WORKDIR /app

RUN     npm install -g bower 
RUN     npm install -g grunt-cli
RUN     npm install 
RUN     bower install --allow-root
RUN     grunt 
RUN     grunt serve
EXPOSE  9000

1
apt-get install --yes node 命令会安装 ax25-node,一个也被称为 node 的业余无线电程序,它位于 /usr/sbin/node 目录下。而 npm 则会安装 node.js 作为依赖项。建议省略 node 或者明确指定 nodejs - Paul
我已经手动在 docker run -it ubuntu:14.04 中运行了您的命令,但无法复制问题,可能是因为我没有您尝试设置的应用程序。即使 ax25-node 作为不需要的副作用安装在 /usr/sbin/node 中,apt-gets 和 npm 安装也可以正常工作。此后运行 grunt 或 bower 也可以正常工作,但由于没有设置要运行的命令,所以不会执行任何操作。 - Paul
嗯,移除ax25-node并将/usr/bin/node符号链接到/usr/bin/nodejs会导致grunt在启动时输出一些消息而不是什么都没有。/usr/local/bin/grunt是一个脚本,以#!/usr/bin/env node开头,因此它会被欺骗运行PATH中的任何node。如果那是无线电节点,而不是nodejs,它将无法工作。 - Paul
1个回答

3
在Ubuntu存储库中,node不是nodejs,而是一个名为ax25-node的业余无线电节点程序,它作为/usr/sbin/node安装。这让Grunt感到困惑,因为它只是一个带有shebang #!/usr/bin/env node 的脚本,并且将执行在$PATH上等同于node的任何内容。
要修复:
替换
RUN     apt-get install -y node npm git git-core

使用

RUN     apt-get install -y nodejs npm git git-core

1
谢谢,我已经修改了我的Dockerfile。请看我的编辑。我还有其他一些小问题,但基本上似乎一切都正常工作了。 - whb

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接