node-babel在Docker中工作得很慢

时间:2016-03-04 10:53:31

标签: node.js docker ecmascript-6 babeljs

我已经设置了一个Docker容器来开发node.js项目。我想使用所有ES6功能,所以我使用babel-node作为转换器,但遇到了一个问题,即trasnpiling进程在Docker中花费了太多时间。

我正在从我的主机安装app目录(所以我可以在webstorm中进行编辑),并使用nodemon跟踪所有更改并自动重启服务器。

 docker build -t lazarev/an_app .
 docker run -d -p 49160:8080 --name map -v $HOME/projects/app:/usr/src/app lazarev/an_app tail -f /dev/null

nodemon -l commang是在shell脚本中设置的,该脚本在ENTRYPOINT的{​​{1}}中设置。

Dockerfile

Dockerfile

FROM node:argon MAINTAINER Lazarev Alexandr <lazarev@elje-group.com> RUN mkdir /docker-entrypoint ADD ./bootstrap.sh /docker-entrypoint RUN locale -a EXPOSE 8080 RUN npm install nodemon -g RUN npm install babel-cli -g ENTRYPOINT ["/docker-entrypoint/bootstrap.sh"]

bootstarp.sh

#!/bin/bash echo "******INSTALL NODE MODULES******" npm install date echo "******RUN THE SERVER******" nodemon -L date

packege.json

为什么我使用{ "name": "app", "version": "1.0.0", "description": "desc", "author": "Lazarev Alexandr <lazarev@elje-group.com>", "scripts": { "test": "echo \"Error: no test specified\" && exit 1", "start": "babel-node --presets es2015 --debug server.js" }, "license": "ISC", "dependencies": { "express": "^4.13.4", "mapnik": "^3.5.2", "babel-preset-es2015": "^6.6.0" } } 可能看起来很奇怪,但是我还没有粘贴其他命令。

所以,我的问题是,在我对主机进行一些更改后,bootstrap.sh会立即检测到更改,但服务器重启大约需要半分钟。如果不通过babel编译nodemon,它会快得多。

此外,当我在我的主机上运行相同的项目时(我的主机是带有2.5 GHz Intel Core i7处理器和16gb内存的MacbookPro),省略ES6,一切都足够快。所以我确信问题出在Docker

我的问题是: 为什么babel-node在Docker容器中转换得如此之慢?有办法限制它吗?

1 个答案:

答案 0 :(得分:4)

在OS X上运行Docker需要使用 Docker Machine 。来自Docker OS X docs

  

因为Docker守护程序使用特定于Linux的内核功能,所以   无法在OS X中本机运行Docker。您必须使用   docker-machine创建并附加到虚拟机(VM)。这个   machine是一个Linux VM,可以在Mac上为您托管Docker。

通过VM挂载文件,然后随后进入正在运行的容器。从主机提供文件通常是可以的,但是希望这些文件能够被监视,编译和同步。

几年前,当我在 boot2Docker 上运行时,我在Windows上遇到了同样的问题,最终你无法做到这一点。 (通过简单搜索可以获得大量帖子,例如https://github.com/boot2docker/boot2docker/issues/593

我的解决方案是切换到Ubuntu。非Linux机器上的共享卷的性能不太可能很快改变。

您可能希望查看使用 rsync docker-osx-dev项目并声明&#34;已安装的文件夹与本机OS X性能和标准文件相同观看机制正常工作&#34;