2016-01-22 2 views
7

Я пытаюсь создать контейнер инструментов docker dev для среды devlopement на хосте Windows с помощью панели инструментов докеров, но у меня есть некоторые проблемы с запуском команды установки npm. Он работал отлично на Linux хосте, но на хосте окна я получил следующее сообщение об ошибке:Выполнение установки npm через Docker на хосте Windows

npm ERR! Linux 4.1.13-boot2docker 
npm ERR! argv "/usr/local/bin/node" "/usr/local/bin/npm" "install" 
npm ERR! node v5.5.0 
npm ERR! npm v3.3.12 
npm ERR! path /var/www/site/.npm/gulp/3.9.0/package.tgz.e87c24357cd6065ee71ce44c6f23673b 
npm ERR! code ETXTBSY 
npm ERR! errno -26 
npm ERR! syscall rename 

npm ERR! ETXTBSY: text file is busy, rename '/var/www/site/.npm/gulp/3.9.0/package.tgz.e87c24357cd6065ee71ce44c6f23673b' -> '/var/www/site/.npm/gulp/3.9.0/package.tgz' 
npm ERR! 
npm ERR! If you need help, you may report this error at: 
npm ERR!  <https://github.com/npm/npm/issues> 
npm ERR! Linux 4.1.13-boot2docker 
npm ERR! argv "/usr/local/bin/node" "/usr/local/bin/npm" "install" 
npm ERR! node v5.5.0 
npm ERR! npm v3.3.12 
npm ERR! path npm-debug.log.39d944b679d410e5293d6721cbc8287a 
npm ERR! code ETXTBSY 
npm ERR! errno -26 
npm ERR! syscall rename 

npm ERR! ETXTBSY: text file is busy, rename 'npm-debug.log.39d944b679d410e5293d6721cbc8287a' -> 'npm-debug.log' 
npm ERR! 
npm ERR! If you need help, you may report this error at: 
npm ERR!  <https://github.com/npm/npm/issues> 

npm ERR! Please include the following file with any support request: 
npm ERR!  /var/www/site/npm-debug.log 

Вот моя Dockerfile:

FROM node:latest 

RUN apt-get update 
RUN apt-get install vim -y 
RUN useradd -ms /bin/bash node 
RUN echo "fs.inotify.max_user_watches=100000" > /etc/sysctl.conf 

ADD . /var/www/site 
RUN chown -R node:node /var/www/site 
RUN chown -R node:node /usr/local/lib/node_modules 
RUN chown -R node:node /usr/local/bin 

USER node 
ENV HOME /var/www/site 

WORKDIR /var/www/site 

RUN npm install -g bower 
RUN npm install --global gulp -y 

EXPOSE 80 8080 35729 

В быстром старте терминала Докера, я использую следующие команды:

Построение изображения (работает отлично)

docker build -t dev_tools . 

Buil динь контейнер (работает отлично)

docker run --name=dev_tools_container -t --rm -v "//c/Users/Public/site:/var/www/site" --net=host dev_tools 

Попытка установить зависимости НПМ (снимает ошибку):

docker exec -it dev_tools_container npm install 

Спасибо за ваше время!

ответ

3

Вместо

RUN npm install --global gulp -y 

использование

RUN sudo npm install --global gulp -y 

Вы пытаетесь установить gulp как глобальный пакет от пользователя node (не суперпользователя).

Или установите gulp перед тем, как переключить пользователя на узел.

USER node 
RUN npm install --global gulp -y 

EDIT:

boot2docker основан на VirtualBox. По соображениям безопасности Virtualbox не разрешает символические ссылки в общих папках.

Чтобы включить симлинка Необходимо установить VBoxInternal2/SharedFoldersEnableSymlinksCreate/имя_общего_каталога к . (Вот ссылка на описание, как это сделать на Vargrant: Symbolic links and synced folders in Vagrant)

VBoxManage setextradata VM_NAME VBoxInternal2/SharedFoldersEnableSymlinksCreate/SHARE_NAME 1 

Заменить VM_NAME и имя_общего_каталога и перезапустить VirtualBox.

Другим решением является добавление --no-bin-link к npm:

RUN npm install -g bower --no-bin-link 
RUN npm install --global gulp -y --no-bin-link 

EDIT 2

По политике 7 безопасности Windows по умолчанию не позволяет создавать символические ссылки, как это потенциальная угроза безопасности. Если пользователь не находится в группе «Администраторы», запустите secpol.msc и перейдите к Локальные политики-назначения прав пользователя и добавьте своего пользователя в Создайте символические ссылки.

Если ваш пользователь принадлежит группе Администраторы, тогда начните VirtualBox с Запуск от имени администратора.

+0

Спасибо за ваш ответ! Я пробовал, но ничего не меняет. Этот контейнер для докеров отлично работает на хосте linux. Я думаю, что это проблема общей папки. Также не проблема с установкой gulp или bower создает проблемы: \ – jiboulex

+0

еще раз спасибо. Я попытался использовать опцию -no-bin-link, но безуспешно. Я посмотрю, что я могу сделать с symlinks. – jiboulex

+0

Я выполнил команду ./VBoxManage.exe setextradata default VBoxInternal2/SharedFoldersEnableSymlinksCreate/c/Users 1 в папке/c/Program Files/Oracle/VirtualBox, но это не повлияло :( – jiboulex

0

Вы можете установить node_modules в качестве тома, поэтому это будет файловая система Linux внутри контейнера Docker. Добавьте это в Dockerfile:

VOLUME /var/www/site/node_modules

Вы увидите каталог на C:Users/Public/site/node_modules, потому что это необходимо для точки монтирования, но вы не будете видеть содержимое, если вы находитесь внутри контейнера.

 Смежные вопросы

  • Нет связанных вопросов^_^