如何从 Angular Nginx 容器连接到 Node API docker 容器
Posted
技术标签:
【中文标题】如何从 Angular Nginx 容器连接到 Node API docker 容器【英文标题】:How to connect to Node API docker container from Angular Nginx container 【发布时间】:2020-12-11 07:22:45 【问题描述】:我目前正在使用 Rest API(Express、Nodejs)和 Postgresql 开发 Angular 应用程序。在我的本地计算机上托管时一切正常。测试后,我将图像移至 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 应该是什么?我尝试了以下方法,但没有任何效果:
-
apiUrl: "http://backend:3000/api"
apiUrl: "http://server-external-ip:3000/api"
apiUrl: "http://server-internal-ip:3000/api"
apiUrl: "http://localhost:3000/api"
【问题讨论】:
【参考方案1】:我认为您应该将docker-compose
服务用作DNS
。看来您有几个可用的 docker 主机/端口,在您的 docker-compose 结构中有以下内容:
确保在backend
服务的环境部分中使用db
作为POSTGRES_DB
。
看看我的repo,我认为这是了解类似项目如何工作以及如何使用nginx
构建多个应用程序的最佳方式,您也可以查看我的docker-compose.yml
,它使用多种服务和使用nginx
代理并一起工作。
在这个link 上,你会找到一个nginx/default.conf
文件,它包含几个nginx
上游配置,请看看我是如何在hosts
那里使用docker-compose 服务引用的。
在client/ 目录中,我还有另一个nginx
作为react.js 项目的Web 服务器。
在server/ 目录上,它有一个Node.js API,它连接到Redis 和同样由docker-compose.yml 构建的Postgres SQL 数据库。
如果您需要将流量设置或重定向到 /api,您可以使用一些 ngnix
配置,例如 this
我认为这个用例可能对您和其他用户有用!
【讨论】:
谢谢@Hugo Lesta。我会试试这个,让你知道。 很好,祝你好运,如果您需要更多帮助,请告诉我 这就是我要找的。这对我来说是一个新概念,所以我在尝试之前通读了文章,但它确实有效。非常感谢您的详细解释。不过有一个问题 - 我已经通过 localhost 访问应用程序在几台机器上对其进行了测试,但我如何使用myapp 访问它?我已经尝试过了,但它没有用。server listen 80; server_name myapp; location / proxy_pass http://myapp; location /api proxy_pass http://backend:3000;
您好 :),您检查过容器状态了吗?它们都启动并运行了吗?您是否尝试在浏览器中运行localhost?如果我之前的回答有用,请标记为已解决,或许对其他用户有帮助。
如果您在虚拟机中托管此解决方案并运行这些容器,您将在该机器中绑定这些端口,这意味着您还可以拥有一个指向端口 80 的负载均衡器,并且它可以工作好吧,如果你也可以设置指向这台机器的 DNS 记录,它也可以工作。如果您只想创建一个名为 myapp 的简单主机,您应该设置您的内部主机文件来实现它。希望对你有帮助以上是关于如何从 Angular Nginx 容器连接到 Node API docker 容器的主要内容,如果未能解决你的问题,请参考以下文章
docker nginx和php,php无法连接到localhost
如何从 Docker 容器连接到 Nvidia MPS 服务器?
如何从 asp.net core webapi 获取数据到连接到数据库的 angular 11.0.0。我试图这样做,但它返回空记录