node.js - 如何从 Angular Nginx 容器连接到 Node API docker 容器

标签 node.js angular docker nginx docker-compose

我目前正在使用 Rest API(Express、Nodejs)和 Postgresql 开发一个 Angular 应用程序。当托管在我的本地计算机上时,一切运行良好。测试后,我将图像移至 Ubuntu 服务器,以便该应用程序可以托管在外部端口上。我可以使用 https://server-external-ip:80 访问 Angular 前端,但在尝试登录时,Nginx 未连接到 NodeApi。这是我的 docker-compose 文件:

version: '3.0' 

services:

  db:
    image: postgres:9.6-alpine
    environment:
      POSTGRES_DB: myDb
      POSTGRES_PASSWORD: myPwd

    ports:
    - 5432:5432
    restart: always
    volumes:
    - ./postgres-data:/var/lib/postgresql/data
    networks:
    - my-network

  backend: # name of the second service
   image: myId/mynodeapi
   ports:
   - 3000:3000
   environment:
    POSTGRES_DB: myDb
    POSTGRES_PASSWORD: myPwd
    POSTGRES_PORT: 5432
    POSTGRES_HOST: db
   depends_on:
   - db
   networks:
   - my-network

   command: bash -c "sleep 20 && node server.js"

  myapp:
    image: myId/myangularapp
    ports:
    - "80:80"
    depends_on:
    - backend
    networks:
    - my-network

networks:
    my-network:

我不确定 apiUrl 应该是什么?我尝试了以下方法,但没有任何效果:

  1. apiUrl:“http://backend:3000/api”
  2. apiUrl:“http://server-external-ip:3000/api”
  3. apiUrl:“http://server-internal-ip:3000/api”
  4. apiUrl:“http://localhost:3000/api”

最佳答案

我认为您应该使用docker-compose服务作为DNS。看来您有多个可用的 docker 主机/端口,您的 docker-compose 结构中有以下内容:

  • 数据库:5432
  • http://backend:3000
  • http://myapp

确保在后端服务的环境部分中将db用作POSTGRES_DB

看看我的 repo ,我认为这是学习类似项目如何工作以及如何使用 nginx 构建多个应用程序的最佳方式,您也可以查看我的 docker-compose.yml,它使用多个服务使用 nginx 代理并协同工作。

关于这个link你会发现一个 nginx/default.conf 文件,它包含几个 nginx 上游配置,请看一下我如何使用 docker-compose 服务引用作为 主机

client/内目录中,我还有另一个 nginx 作为 React.js 项目的 Web 服务器。

关于server/目录,它有一个 Node.js API,它连接到同样由 docker-compose.yml 构建的 Redis 和 Postgres SQL 数据库。

如果您需要将流量设置或重定向到/api,您可以使用一些 ngnix 配置,例如 this

我认为这个用例对您和其他用户很有用!

关于node.js - 如何从 Angular Nginx 容器连接到 Node API docker 容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63530776/

相关文章:

javascript - 在 NodeJS 中处理多个、顺序、依赖的 mongo 查询结果的最佳方法

node.js - 我可以用 Node/Electron 停用监视器/显示器吗?

angular - 理解 TypeScript 中的问号、冒号和未定义

angular - ng2-pdf-viewer 错误 : Invalid parameter object: need either . 数据,.range 或 .url

javascript - 导出为 Pdf Angular 6

Dockerfile Alpine Image APK无法找到Java 8

javascript - 从 URL 解析 JSON 数据

node.js - 汇总后 crypto.createHmac 未定义

python - 使用 Docker 执行任意代码

docker - Kubernetes无法从其他节点删除Docker镜像