我有一个在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毫秒,这确实将延迟减少到几秒钟,但这显然不是理想的,延迟仍然很大。
为什么会出现这种延迟?
// 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",
...
}
答案 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