Node.js 如何从Angular Nginx容器连接到节点API docker容器

Node.js 如何从Angular Nginx容器连接到节点API docker容器,node.js,angular,docker,nginx,docker-compose,Node.js,Angular,Docker,Nginx,Docker Compose,我目前正在使用RESTAPI(Express、Nodejs)和Postgresql开发angular应用程序。在我的本地机器上托管时,一切都运行良好。测试后,我将图像移动到Ubuntu服务器,这样应用程序就可以托管在外部端口上。我可以使用https://server-external-ip:80 但是当尝试登录时,Nginx没有连接到NodeApi。这是我的docker撰写文件: version: '3.0' services: db: image: postgres:9.6-

我目前正在使用RESTAPI(Express、Nodejs)和Postgresql开发angular应用程序。在我的本地机器上托管时,一切都运行良好。测试后,我将图像移动到Ubuntu服务器,这样应用程序就可以托管在外部端口上。我可以使用https://server-external-ip:80 但是当尝试登录时,Nginx没有连接到NodeApi。这是我的docker撰写文件:

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:

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

  • apiUrl:“http://backend:3000/api"
  • apiUrl:“http://server-external-ip:3000/api"
  • apiUrl:“http://server-internal-ip:3000/api"
  • apiUrl:“http://localhost:3000/api"

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

    • db:5432
    • http://backend:3000
    • http://myapp
    确保在
    后端
    服务的环境部分中使用
    db
    作为
    POSTGRES\u db

    看看my,我认为这是了解类似项目如何工作以及如何使用
    nginx
    构建多个应用程序的最佳方法,您还可以查看my
    docker compose.yml
    ,它使用多个服务,并使用
    nginx
    代理,并且一起工作

    在这里,您将找到一个
    nginx/default.conf
    文件,其中包含多个
    nginx
    上游配置。请查看我是如何使用docker compose服务引用作为
    主机的

    在目录中,我还有另一个
    nginx
    作为react.js项目的web服务器

    在目录上,它有一个Node.js API,它连接到Redis和Postgres SQL数据库,也从docker-compose.yml构建

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


    我认为这个用例对你和其他用户都很有用

    谢谢雨果·莱斯塔。好的,祝你好运,如果你需要更多的帮助,请告诉我。这就是我一直在寻找的。这对我来说是一个新的概念,所以我在尝试之前阅读了所有的文章,但效果不错。非常感谢您的详细解释。不过有一个问题-我已经在几台机器上测试过,通过localhost访问应用程序,但是我如何使用?我已经试过了,但没有效果<代码>服务器{listen 80;服务器名称myapp;位置/{proxy\u passhttp://myapp}位置/api{proxy_passhttp://backend:3000}
    Hello:),您检查过容器状态了吗?他们都准备好了吗?您是否尝试在浏览器中运行?如果我之前的回答有用,请将其标记为已解决,也许这有助于其他用户。如果您将此解决方案托管在虚拟机中并运行这些容器,您将在该机器中绑定这些端口,这意味着您还可以有一个指向端口80的负载平衡器,它将正常工作,如果你也可以设置指向这台机器的DNS记录,它也可以工作。如果您只想创建一个名为myapp的简单主机,您应该设置内部主机文件来实现这一点。我希望它能帮助你