Angular CLI& Docker:ng服务变更检测非常慢

时间:2018-04-19 21:59:45

标签: angular docker

我有一个在Docker容器中运行的Angular 5.2应用程序,出于开发目的,我使用Angular CLI的ng-serve来提供应用程序,该应用程序提供对更改的自动重新加载。我原来的工作服务命令;

ng serve --host 0.0.0.0 --port 80 --disable-host-check

此功能正常,我可以按预期从主机访问提供的应用程序。

对于上述情况,感谢各种来源,我添加了--poll 1000标志,它告诉CLI每隔1000毫秒轮询一次文件的变化,没有它就永远不会检测到变化,因此永远不会重新编译和更新。我的问题是在正在更改的文件和触发重建的docker容器中检测到的更改之间,存在最多15-20秒的延迟。我已确认文件更改已转换为容器,因为我可以cat立即保存在容器中的已编辑文件并查看更改。我可以将轮询超时更改为1毫秒,这确实将延迟减少到几秒钟,但这显然不是理想的,延迟仍然很大。

为什么会出现这种延迟?

  • OSX版本:10.11.6
  • Docker版:Docker版本18.04.0-ce,build 3d479c0
  • Docker Machine :0.14.0,build 89b8332
  • Docker Compose :1.21.0
// docker-compose.yml
web-client:
  build:
    context: ../web-client/
    dockerfile: ./docker/Dockerfile
  ports:
    - "80:80"
  volumes:
    - ../web-client/:/var/www/web-client
  container_name: web-client



// Dockerfile
FROM node:9.11

COPY ./ /var/www/web-client

ENTRYPOINT ["/var/www/web-client/docker/entrypoint.sh"]



// entrypoint.sh
#!/usr/bin/env bash

cd /var/www/web-client

yarn run start



// package.json
"scripts": {
    ...
    "start": "ng serve --host 0.0.0.0 --port 80 --poll 1 --disable-host-check",
    ...
}

1 个答案:

答案 0 :(得分:0)

这是我的设置,很快,

docker compose,将端口4200暴露在外部,安装src文件夹以检测更改:

version: '2'
services:
  web:
    container_name: my-spa-dev
    build:
      context: ./
      dockerfile: Dockerfile.test
    ports:
      - "4200:4200"
    volumes:
      - ./src:/usr/src/app/src

Dockerfile.test:

FROM node:10
WORKDIR /usr/src/app

COPY package.json ./
COPY yarn.lock ./

RUN yarn install

COPY . .

CMD ["yarn", "start"]

运行docker-compose -f docker-compose.dev.yml up