2016-10-25 3 views
5

Я в настоящее время делает свои первые шаги с грузчиком и пытается использовать docker-compose запустить мое приложение:Использование узла пререкаться с докер-компоновать

Node-Backend: Хапи
JS-Frontend: угловой
MongoDB база

MongoDB в сочетании с грузчиком работает justfine. Я разрабатываю на OSX-машине и использую узел-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. 

узел-дерзость модуль, кажется, нуждается Linux привязок, но только имеет OSX привязок внутри контейнера. Поэтому возникает вопрос: есть ли разумный способ решить эту проблему, чтобы даже процесс dev по-прежнему был удобен?

До сих пор у меня нет 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 внутри контейнера без каких-либо ограничений на процесс разработки?

+0

Любой прогресс на этом, есть ли решение? У меня такая же проблема. – Yves

ответ

0

Вы должны отредактировать свой образ npm, чтобы создать собственный прогон npm install внутри него, а не только npm start. Таким образом, пакеты npm внутри контейнера будут совместимы с ОС контейнера. Вы можете проверить https://github.com/titouanfreville/SupJirallo (я не использовал узел-sass, но у него есть изображение узла с установкой npm).

+0

спасибо! с этим решением процесс dev больше не прекращается:/Bu, тем не менее, спасибо! :) – fheck

+0

Что вы подразумеваете под не совсем умным? :) Я не думаю, что это сильно изменилось из того, что вы делали, поскольку вы просто строите npm внутри контейнера, но все равно используете том для просмотра обновленных файлов. Он вполне адаптируется к процессу dev. Вам не нужно устанавливать npm в вашей собственной среде, так как она находится в контейнере, а исходный код внутри контейнера обновлен с вашей локальной.Когда-либо я не получаю то, что вы хотите, когда-либо вы не используете докер с хорошим мышлением :) - предположим, это первый. –

2

Вам необходимо запустить npm rebuild node-sass внутри контейнера. Вы монтируете двоичный файл, скомпилированный для OSX и пытающийся работать в Linux.

+0

спасибо! с этим решением процесс dev больше не прекращается:/Bu, тем не менее, спасибо! :) – fheck

1

Это может быть старая новость, но в случае, если кто-то работает в этом ...

Run npm install внутри контейнера (для создания привязки для окружающей среды ваш контейнер работает в)

Затем скопируйте привязка от node_modules/node-sass/vendor/ к среде разработки.

Я делаю это на Mac для dev env, но узел: alpine для запуска контейнера.

+0

Можете ли вы уточнить? –