与docker-compose一起使用node-sass

我目前正在与docker工人做第一步,并尝试使用docker-compose来运行我的应用程序:

Node-Backend: hapi
JS-Frontend: angular度
MongoDB数据库

与docker结合的mongodb工作正常。 我正在开发OSX机器,并使用node-sass作为前端部分。 撰写时出现错误:

 server_1 | Child extract-text-webpack-plugin: server_1 | + 1 hidden modules server_1 | server_1 | ERROR in Missing binding /app/node_modules/node-sass/vendor/linux-x64-48/binding.node server_1 | Node Sass could not find a binding for your current environment: Linux 64-bit with Node.js 6.x server_1 | server_1 | Found bindings for the following environments: server_1 | - OS X 64-bit with Node.js 6.x server_1 | server_1 | This usually happens because your environment has changed since running `npm install`. server_1 | Run `npm rebuild node-sass` to build the binding for your current environment. 

node-sass模块似乎需要linux绑定,但在容器内部只有osx绑定。 所以问题是:是否有一个聪明的方法来解决这个问题,使开发过程仍然舒适?

到目前为止,我没有任何Dockerfile 。 但是我docker-compose.yml看起来像:

 version: '2' services: server: image: node:6 command: 'npm start' working_dir: '/app' volumes: - ./:/app depends_on: - mongo ports: - '1337:1337' environment: - NODE_ENV=prod links: - mongo:mongodb mongo: image: mongo:latest ports: - '127.0.0.1:27017:27017' volumes: - ./data/:/data/db 

package.json

 ... "dependencies": { "accepts": "^1.3.3", "akaya": "^0.3.0", "angular": "^1.5.8", "angular-ui-router": "next", "bcrypt": "^0.8.7", "blipp": "^2.3.0", "boom": "^4.2.0", "emojilib": "^2.0.2", "emojione": "^2.2.6", "glue": "^4.0.0", "good": "^7.0.2", "good-console": "^6.1.2", "good-file": "^6.0.1", "good-squeeze": "^5.0.0", "hapi": "^15.2.0", "hapi-auth-basic": "^4.2.0", "hapi-auth-jwt2": "^7.1.3", "inert": "^4.0.2", "joi": "^9.2.0", "jquery": "^3.1.1", "jsonwebtoken": "^7.1.9", "lodash": "^4.16.4", "mongoose": "^4.6.4", "pm2": "^2.0.18", "twemoji": "^2.2.0", "wurst": "^0.9.1" }, "devDependencies": { "autoprefixer": "^6.5.1", "babel-cli": "^6.16.0", "babel-core": "^6.17.0", "babel-eslint": "^7.0.0", "babel-loader": "^6.2.5", "babel-plugin-transform-decorators-legacy": "^1.3.4", "babel-preset-es2015": "^6.16.0", "babel-preset-stage-0": "^6.16.0", "baggage-loader": "^0.2.4", "chokidar": "^1.6.1", "clean-webpack-plugin": "^0.1.13", "copy-webpack-plugin": "^3.0.1", "css-loader": "^0.25.0", "eslint": "^3.8.1", "eslint-config-airbnb-base": "^9.0.0", "eslint-loader": "^1.6.0", "eslint-plugin-import": "^2.0.1", "extract-text-webpack-plugin": "^1.0.1", "file-loader": "^0.9.0", "html-loader": "^0.4.4", "html-webpack-plugin": "^2.24.0", "inline-style-prefix-all": "^2.0.2", "json-loader": "^0.5.4", "ng-annotate-loader": "^0.2.0", "ngtemplate-loader": "^1.3.1", "node-sass": "^3.10.1", "postcss-loader": "^1.0.0", "sass-loader": "^4.0.2", "style-loader": "^0.13.1", "url-loader": "^0.5.7", "webpack": "^1.13.2", "webpack-livereload-plugin": "^0.9.0", "webpack-manifest-plugin": "^1.1.0", "webpack-md5-hash": "^0.0.5" }, "engines": { "node": "6.0.0", "npm": "^3.8.8" } 

谢谢!!

编辑:我的本地目录./被挂载到容器,所以我的OSX绑定模块也被挂载。 有没有一个聪明的方式来做一个新的npm i在容器内没有任何更大的限制发展过程?

您需要在容器内运行npm rebuild node-sass 。 您正在装入一个为OSX编译的二进制文件,并尝试在Linux上运行。

这可能是一个旧消息,但如果有其他人遇到这个…

在容器中运行npm install (为容器运行的环境构build绑定)

然后将绑定从node_modules/node-sass/vendor/复制到开发环境中。

我在开发环境的Mac上做了这个,但一个节点:运行容器的阿尔卑斯山。

你应该编辑你的npm映像来创build你自己的一个运行npm install而不是npm start 。 因此,容器内的npm包将与容器操作系统兼容。 你可以查看https://github.com/titouanfreville/SupJirallo (我没有使用node-sass,但是它有一个npm install的节点映像)。