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

Jam*_*ley 6 docker angular

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

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

这个功能很好,我可以按照预期从主机访问服务的应用程序.

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

为什么会出现这种延迟?


  • OSX版本:10.11.6
  • Docker版本:Docker版本18.04.0-ce,构建3d479c0
  • Docker Machine:0.14.0,build 89b8332
  • Docker撰写: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",
    ...
}
Run Code Online (Sandbox Code Playgroud)

gol*_*das 1

这是我的设置相当快,

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
Run Code Online (Sandbox Code Playgroud)

Dockerfile.测试:

FROM node:10
WORKDIR /usr/src/app

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

RUN yarn install

COPY . .

CMD ["yarn", "start"]
Run Code Online (Sandbox Code Playgroud)

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