首页 > 解决方案 > Docker 网络实时重载节点/角度应用程序

问题描述

我还是 docker 新手,目前正在尝试创建开发环境。我还创建了一个 docker 网络来添加这三个服务。我有:

我的码头文件如下:

快速应用程序的 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 日志 在此处输入图像描述

快递集装箱的码头日志 在此处输入图像描述

运行“docker compose build”和“docker compose up”时,没有错误。但是修改源代码时热重载不起作用。

我通过创建 docker 卷尝试了 angular 应用程序,而 express 应用程序没有 docker 卷。

你能帮忙吗?

谢谢你。

标签: angulardockerexpressdocker-composedocker-network

解决方案


最好使用两个容器的日志文件更新您的问题,如果日志给出特定的角度错误,这将有助于人们进一步提供帮助。

如果它与特定的 Angular 设置(文件夹/配置等)有关,其他一些用户可能会提供进一步的建议。

如果没有日志文件,人们将很难提供帮助。

这将是一个用于指导/排除 Docker 配置故障的列表,并且很可能最终不会成为与您的问题相关的具体答案。我建议一些 docker-compose 和 docker 命令的基本用法(所以其中一些您可能已经尝试过)。

  1. 当您说“热重新加载”时,您是指编译 Angular 应用程序,还是尝试重新加载 Docker 容器?和
    之间有区别。如您所知,创建容器,所以小心不要尝试使用,因为它会删除容器。使用其他命令启动/停止。docker-compose down/updocker-compose stop/startupdown

  2. 首先要查看的地方是查看当前创建的容器的日志docker logs container_name1
    :-(默认情况下,docker-compose 会将 docker-compose.yml 文件所在的当前文件夹名称附加为新容器名称的一部分)
    请参阅docker-compose ps(您在 docker-compose.yml 或子文件夹中使用它)以查看为此实例和状态创建的容器名称。

  3. 端口可能被防火墙阻止,因此请注意这一点并为您的操作系统相应地打开。确保docker-compose ps实际显示的端口port 3000, 4200

  4. 您的卷似乎是一个新的空未命名卷 /frontend/node_modules和一个绑定挂载,采用当前上下文即: ./frontend 并将其挂载到/frontend. 那是你的意图吗?

    我对角度一无所知,但node_modules在新容器中应该是空的吗?一旦应用程序运行,您是否计划在容器内添加/安装节点模块?这仅在您想要重建映像之前很有用。一旦你进一步测试了你的容器,*记下你想要安装的模块,并尝试RUN为相应的模块安装创建 Dockerfile 命令。这也很可能意味着您的node_modules内容应该是 Dockerfile ADDed,而不是为它们创建卷。 我假设 package.json 包含要在容器内安装一次的模块的描述?

    我认为您希望通过绑定安装在外部/内部维护的持久应用程序数据设置正确(/frontend似乎可以访问)。

  5. 如果您的应用程序在您“热重启”之前运行正常,您是否访问了创建的容器以查看内容并查看文件夹位置/日志等是否正确?运行docker exec -ti container_name bash(以 Ubuntu 容器为例)并在内部导航。


推荐阅读