gpt4 book ai didi

angularjs - docker compose 中的 Angular 不会重新加载更改

转载 作者:行者123 更新时间:2023-12-02 01:07:14 25 4
gpt4 key购买 nike

我是 docker 的新手,我正在尝试使用 django-rest 和 angular 进行应用。我当前的 docker-compose 文件如下所示:

version: '3'

services:
db:
image: postgres
environment:
- POSTGRES_DB=pirate
- POSTGRES_USER=django
- POSTGRES_PASSWORD=secreat
volumes:
- db-data:/var/lib/postgresql/data
ports:
- "5432:5432"
backend:
entrypoint: /entrypoint.sh
build: ./backend
command: python manage.py runserver 0.0.0.0:8000
volumes:
- .:/code
ports:
- "8000:8000"
depends_on:
- db
healthcheck:
test: [“CMD”, “curl”, “--fail”, 'http://localhost:8000']
interval: 10s
timeout: 5s
retries: 3
frontend:
build: ./frontend
volumes:
- .:/app
healthcheck:
test: [“CMD”, “curl”, “--fail”, 'http://localhost:4200']
interval: 10s
timeout: 5s
retries: 3
ports:
- "4200:4200"
nginx:
build: ./nginx
healthcheck:
test: [“CMD”, “curl”, “--fail”, 'http://localhost']
interval: 10s
timeout: 5s
retries: 3
ports:
- "80:80"
links:
- frontend
volumes:
db-data:

这是我的 Angular Dockerfile:

FROM node:8.6
RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app
COPY package.json /usr/src/app
RUN npm install

# Here starts angular cli workaround
USER node
RUN mkdir /home/node/.npm-global
ENV PATH=/home/node/.npm-global/bin:$PATH
ENV NPM_CONFIG_PREFIX=/home/node/.npm-global
RUN npm install -g @angular/cli
# Here ends

COPY . /usr/src/app
CMD ["npm", "start"]

现在这就是问题所在:每当我在我的 Angular 代码中更改某项时,带有 Angular 的 docker 图像不会重新加载更改。我不知道我做错了什么。

最佳答案

问题与文件系统在 Docker 中的工作方式有关。要解决此问题,我建议您执行热重载(您已在 Dockerfile 和端口 - '49153:49153' 中添加 EXPOSE 49153 在 docker-compose.yml 中)

还有其他解决方案,如 inotify 或 nodemon,但它们要求您在启动应用程序时使用 --poll 选项。问题是他们不断轮询 fs 的变化,如果应用程序很大,你的机器会比你想要的慢很多。


我想我找到了问题所在。您将 ./app 复制到 /usr/src/app 中,但您将 .:/app 设置为一个卷。所以这意味着如果你进入你的 docker 实例,你会在 2 个地方找到你的应用程序:/app/usr/src/app

要解决这个问题,你应该有这个映射:.:/usr/src/app

顺便说一句,您将使用主机中的 node_modules,这可能会产生一些问题。为避免这种情况,您可以添加一个空卷映射:/usr/src/app/node_modules


如果您进入正在运行的容器,您会发现文件夹 app 存在两次。您可以通过执行来尝试:

docker exec -it $instanceName /bin/sh
ls /app
ls /usr/src/app

问题是在你的编码过程中只有 /app 的内容发生变化,而你的应用程序当前正在执行 /usr/src/app 的内容,它始终保持不变一样。

docker-compose 中的前端应该如下所示:

frontend:
build: ./frontend
volumes:
- .:/usr/src/app
- /usr/src/app/node_modules

关于angularjs - docker compose 中的 Angular 不会重新加载更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47033121/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com