【问题标题】:Docker network live reload node/angular appDocker 网络实时重新加载节点/角度应用程序
【发布时间】:2020-08-07 09:30:10
【问题描述】:

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

  • 一个角度应用程序
  • 快递应用
  • 一个 mongodb 镜像

我的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

docker-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 卷。

你能帮忙吗?

谢谢。

【问题讨论】:

  • 找到解决方案的运气好吗?
  • @Devashish 我在本地为节点和角度应用程序完成了它。在 docker 上启动 mongodb 并在 node app 中链接 url。
  • 请勿发布代码、数据、错误消息等的图片 - 将文本复制或输入到问题中。 How to Ask

标签: angular docker express docker-compose docker-network


【解决方案1】:

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

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

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

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

  1. 当您说“热重新加载”时,您是指编译 Angular 应用程序,还是尝试重新加载 Docker 容器?
    docker-compose down/updocker-compose stop/start 之间存在差异。如您所知,up 创建容器,因此请注意不要尝试使用 down,因为它会删除容器。使用其他命令启动/停止。

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

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

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

【讨论】:

  • 您好@CvRChameleon,感谢您的回复。我已经在问题中添加了日志。当我说“热重新加载”时,我的意思是,当我更改 IDE 中的代码时,我希望看到更改反映在我的浏览器上。我做了一些研究,发现这是可能的,但它似乎对我不起作用。抱歉,如果问题不够清楚,如果您需要更多信息,请告诉我。
  • 关于你的第四点,我认为我对卷的理解仍然没有很好,我目前正在再次浏览文档。感谢您的提醒。
  • 我想一旦您的 bind-mounts 设置正确,并且没有缓存妨碍(服务器/浏览器),应该可以刷新。我在一些网络项目中使用了绑定安装(当然不是角度)。
  • 好的,谢谢您的指点。在尝试与此相关的一些事情后,我将对此进行调查并在此处回复。你有没有尝试过 node/express 项目?
  • 请确认您的容器名称,因为您正在访问容器82df,但您的docker-compose.yml 它们被称为express-appangular-app。从技术上讲,docker-compose up 名称应该像 currentfolder_express-appcurrentfolder_angular-app(版本 3+)一样创建。为了您的信息,当前版本的 docker-compose 您可以将您的“版本”更新为 3.7(有 3.8,但似乎略有不同)
猜你喜欢
  • 2020-06-06
  • 2023-03-22
  • 1970-01-01
  • 2023-01-26
  • 2015-03-06
  • 2022-01-08
  • 1970-01-01
  • 2019-02-08
  • 2015-08-19
相关资源
最近更新 更多