在Windows主机上通过Docker执行npm安装

我试图通过docker工具箱在Windows主机上创build一个docker dev工具容器,但是我在运行npm install命令时遇到了一些麻烦。 它在Linux主机上正常工作,但在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快速入门terminal中,我使用以下命令:

build立图像(正常工作)

 docker build -t dev_tools . 

build造容器(工作正常)

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

试图安装npm依赖项(发生错误):

 docker exec -it dev_tools_container npm install 

感谢您的时间 !

代替

 RUN npm install --global gulp -y 

使用

 RUN sudo npm install --global gulp -y 

您尝试从用户node (而不是超级用户)安装gulp作为全局程序包。

或者在将用户切换到节点之前安装gulp

 USER node RUN npm install --global gulp -y 

编辑:

boot2docker基于VirtualBox 。 由于安全原因,Virtualbox不允许共享文件夹上的符号链接。

启用符号链接您必须将VBoxInternal2 / SharedFoldersEnableSymlinksCreate / SHARE_NAME设置1 。 (这里是链接描述如何做Vargrant: 符号链接和同步文件夹在stream浪汉 )

 VBoxManage setextradata VM_NAME VBoxInternal2/SharedFoldersEnableSymlinksCreate/SHARE_NAME 1 

replaceVM_NAME和SHARE_NAME并重新启动VirtualBox。

另一个解决scheme是添加--no-bin-link无法--no-bin-linknpm

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

编辑2

默认情况下,Windows 7安全策略不允许创build符号链接,因为这是潜在的安全威胁。 如果用户不在pipe理员组中,请运行secpol.msc并导航到本地策略 – 用户权限分配并将您的用户添加到创build符号链接

如果您的用户属于pipe理员组,则以“以pipe理员身份运行”启动VirtualBox

您可以将node_modules挂载为一个卷,因此它将成为Docker容器内的Linux文件系统。 把它添加到你的Dockerfile中:

VOLUME /var/www/site/node_modules

您将在C:Users/Public/site/node_modules看到目录,因为它是装入点所必需的,但除非您在容器内,否则不会看到任何内容。

Interesting Posts