如何从Angular Nginx容器连接到Node API docker容器

时间:2020-08-21 22:25:33

标签: node.js angular docker nginx docker-compose

我目前正在使用Rest API(Express,Nodejs)和Postgresql开发一个有角度的应用程序。将其托管在本地计算机上时,一切工作正常。经过测试后,我将映像移至Ubuntu服务器,以便可以将应用程序托管在外部端口上。我可以使用https:// server-external-ip:80访问有角度的前端,但是在尝试登录时,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”

1 个答案:

答案 0 :(得分:2)

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

  • db:5432
  • http:// backend:3000
  • http:// myapp

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

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

在此link上您将找到一个nginx/default.conf文件,其中包含几个nginx上游配置,请查看我如何在其中使用docker-compose服务引用作为{{1 }}。

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

server/目录中,它具有Node.js API,它连接到Redis和Postgres SQL数据库,该数据库也是从docker-compose.yml构建的。

如果您需要设置流量或将流量重定向到/ api,则可以使用this之类的nginx配置

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