angular - Docker 网络实时重载节点/角度应用程序
问题描述
我还是 docker 新手,目前正在尝试创建开发环境。我还创建了一个 docker 网络来添加这三个服务。我有:
- 一个角度应用程序
- 一个快递应用
- 一张mongodb图片
我的码头文件如下:
快速应用程序的 Dockerfile
FROM node:12.0.0
ENV PORT=3000
COPY . /var/www
WORKDIR /var/www
RUN npm install
EXPOSE $PORT
ENTRYPOINT ["npm", "run", "start.dev"]
Angular 应用程序的 Dockerfile
### STAGE 1: Build ###
FROM node:12.0.0
WORKDIR /app
COPY package.json ./
# COPY package.json package-lock.json ./
RUN npm install
COPY . .
EXPOSE 4200
CMD npm start
码头工人-compose.yml
version: '3'
services:
express-app:
build:
context: ./auth-app
dockerfile: Dockerfile
ports:
- "3000:3000"
networks:
- docker-network
mongodb:
image: mongo
networks:
- docker-network
angular-app:
build:
context: ./frontend
dockerfile: Dockerfile
ports:
- "4200:4200"
volumes:
- "/frontend/node_modules"
- ".:/frontend"
networks:
- docker-network
networks:
docker-network:
driver: bridge
Angular 应用程序包.json
"scripts": {
"ng": "ng",
"start": "ng serve --host 0.0.0.0 --poll",
"build": "ng build",
"test": "ng test",
"lint": "ng lint",
"e2e": "ng e2e"
},
快递应用包.json
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"start.dev": "nodemon -L src/app.ts"
},
运行“docker compose build”和“docker compose up”时,没有错误。但是修改源代码时热重载不起作用。
我通过创建 docker 卷尝试了 angular 应用程序,而 express 应用程序没有 docker 卷。
你能帮忙吗?
谢谢你。
解决方案
最好使用两个容器的日志文件更新您的问题,如果日志给出特定的角度错误,这将有助于人们进一步提供帮助。
如果它与特定的 Angular 设置(文件夹/配置等)有关,其他一些用户可能会提供进一步的建议。
如果没有日志文件,人们将很难提供帮助。
这将是一个用于指导/排除 Docker 配置故障的列表,并且很可能最终不会成为与您的问题相关的具体答案。我建议一些 docker-compose 和 docker 命令的基本用法(所以其中一些您可能已经尝试过)。
当您说“热重新加载”时,您是指编译 Angular 应用程序,还是尝试重新加载 Docker 容器?和
之间有区别。如您所知,创建容器,所以小心不要尝试使用,因为它会删除容器。使用其他命令启动/停止。docker-compose down/up
docker-compose stop/start
up
down
首先要查看的地方是查看当前创建的容器的日志
docker logs container_name1
:-(默认情况下,docker-compose 会将 docker-compose.yml 文件所在的当前文件夹名称附加为新容器名称的一部分)。
请参阅docker-compose ps
(您在 docker-compose.yml 或子文件夹中使用它)以查看为此实例和状态创建的容器名称。端口可能被防火墙阻止,因此请注意这一点并为您的操作系统相应地打开。确保
docker-compose ps
实际显示的端口port 3000, 4200
。您的卷似乎是一个新的空未命名卷
/frontend/node_modules
和一个绑定挂载,采用当前上下文即: ./frontend 并将其挂载到/frontend
. 那是你的意图吗?我对角度一无所知,但
node_modules
在新容器中应该是空的吗?一旦应用程序运行,您是否计划在容器内添加/安装节点模块?这仅在您想要重建映像之前很有用。一旦你进一步测试了你的容器,*记下你想要安装的模块,并尝试RUN
为相应的模块安装创建 Dockerfile 命令。这也很可能意味着您的node_modules内容应该是 DockerfileADD
ed,而不是为它们创建卷。 我假设 package.json 包含要在容器内安装一次的模块的描述?我认为您希望通过绑定安装在外部/内部维护的持久应用程序数据设置正确(
/frontend
似乎可以访问)。如果您的应用程序在您“热重启”之前运行正常,您是否访问了创建的容器以查看内容并查看文件夹位置/日志等是否正确?运行
docker exec -ti container_name bash
(以 Ubuntu 容器为例)并在内部导航。
推荐阅读
- javascript - 当我有时点击购物按钮时,它不起作用 javascript
- c# - Serilog 不在 ASP.NET 中创建文件
- node.js - Npm 前缀 -g 未被识别为内部或外部命令
- angular - Angular 材料在我的项目中不起作用,也没有错误
- java - 使用 JDBC 针对 PostgreSQL 验证凭据
- visual-studio-code - VSCode [Remote - Containers] [SSH 代理转发] 是如何工作的?
- google-apps-script - 在 AppScript 中格式化日期 - 谷歌表格到谷歌文档的转换
- javascript - 如何正确地将函数传递给 eventListener?
- android - 通过 Admob 中介添加 Facebook Audience Network 需要对 Flutter 项目进行哪些更改?
- sql - 如何为每个 ID 选择最后一个元素