【问题标题】:Angular CLI & Docker: ng serve change detection very slowAngular CLI 和 Docker:ng 服务变更检测非常慢
【发布时间】:2018-04-19 21:59:44
【问题描述】:

我有一个在 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,构建 3d479c0
  • Docker 机器:0.14.0,构建 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",
    ...
}

【问题讨论】:

  • 你是如何在运行时挂载或者你使用了哪个命令的 docker 文件的?您使用哪个操作系统?和docker版本这些东西在回答这个问题之前需要弄清楚
  • @Adiii 我已经添加了版本号以及我认为相关的脚本
  • 好的,让我检查一下上面的设置

标签: angular docker


【解决方案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

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运行

【讨论】:

    猜你喜欢
    • 2018-01-30
    • 2020-09-14
    • 2016-05-16
    • 1970-01-01
    • 2019-12-21
    • 2018-05-21
    • 1970-01-01
    • 2019-11-11
    • 1970-01-01
    相关资源
    最近更新 更多