你怎么能让Grunt livereload在Docker中工作?

时间:2015-12-04 23:47:43

标签: node.js docker gruntjs docker-compose livereload

我试图将Docker用作Windows中的开发环境。

我正在开发的应用程序使用Node,NPM和Bower来设置开发工具,Grunt用于运行任务,并包含实时重新加载,以便在代码更改时应用程序更新。很标准。它在Docker之外工作正常,但无论我如何尝试在Docker中执行它,我都会遇到Grunt错误Fatal error: Unable to find local grunt.

我最近的努力包括在构建时将所有npm和bower依赖项安装到映像中的app目录,以及将应用程序的Gruntfile.js复制到该目录。

然后在Docker-Compose中创建一个链接到主机应用程序的卷,并让Grunt使用Grunt的--base选项观看该卷。它仍然没有工作。我仍然得到了致命的错误。

以下是有问题的Docker文件:

Dockerfile:

# Pull base image.
FROM node:5.1

# Setup environment
ENV NODE_ENV development

# Setup build folder
RUN mkdir /app
WORKDIR /app

# Build apps
#globals
RUN npm install -g bower
RUN echo '{ "allow_root": true }' > /root/.bowerrc
RUN npm install -g grunt
RUN npm install -g grunt-cli
RUN apt-get update
RUN apt-get install ruby-compass -y
#locals
ADD package.json /app/
ADD Gruntfile.js /app/
RUN npm install
ADD bower.json /app/
RUN bower install

搬运工-compose.yml:

angular:
 build: .
 command: sh /host_app/startup.sh
 volumes:
   - .:/host_app
 net: "host"

startup.sh:

#!/bin/bash
grunt --base /host_app serve 

我能在Docker中实际运行应用程序的唯一方法是在构建时将所有文件复制到映像,在那里创建dev依赖项,然后对复制的文件运行Grunt。但是每次我在应用程序中更改任何内容时,我都必须运行一个新版本。

一定有办法吗?根据Docker自己的Django quick startup instructions,我的Django应用程序能够在Docker中进行实时重新加载没有任何问题。所以我知道实时重载可以与Docker一起使用。

PS:我已经尝试将Grunt文件留在Volume上并使用Grunt的--gruntfile选项,但它仍然崩溃。我也尝试在共享卷中的Docker-Compose时创建依赖项,但是我遇到了npm错误,用于解包tars。我得到的印象是,虚拟机无法处理通过共享文件系统和扼流圈运行的数据量,或者Windows文件系统无法正确存储Linux文件。或者其他什么。

0 个答案:

没有答案