gpt4 book ai didi

angular - 为什么一个 Angular 容器需要一个暴露的端口来连接?

转载 作者:行者123 更新时间:2023-12-02 19:19:34 24 4
gpt4 key购买 nike

这只是一个关于理论的问题,我的应用程序运行完美......

所以,我有 3 个使用 docker-compose 运行的服务:一个 postgres 数据库 , 一个 后台springboot 前端 Angular .

据我所知,docker容器可以访问其他docker容器的端口,而不需要暴露端口,所以不需要暴露或绑定(bind)端口,因为它们都是容器,可以通过默认的桥接网络模式相互访问(这是我学到的,不知道这是否正确)。

我只需要从前端容器公开端口,这样我就可以从我的本地主机访问。

问题是:我可以使用后端(后端-> 数据库)访问数据库,而无需导出任何端口,但是前端(前端-> 后端)使用 Angular 和 nginx,它只适用于暴露的后端端口,为什么?

docker -compose.yml:

version: "3"
services:
### DATABASE ###
db:
image: postgres:latest
container_name: mydb
network_mode: bridge
environment:
- POSTGRES_PASSWORD=envpass
- POSTGRES_USER=envuser
- POSTGRES_DB=database

# It works without exposing
# expose:
# - 5432
# ports:
# - 5433:5432

### BACKEND ###
backend:
image: angularback
container_name: backend
network_mode: bridge
expose:
- 8080
ports:
- 8082:8080
depends_on:
- db
links:
- db

### FRONTEND ###
frontend:
image: angularfront
container_name: frontend
network_mode: bridge
expose:
- 80
ports:
- 8084:80
depends_on:
- backend
links:
- backend

最佳答案

您的 Angular 前端正在从前端容器外部向 Spring 后端发出请求。它正在从您的浏览器内部发出请求。这就是为什么后端也需要暴露的原因。

二、你不需要links .由于两个服务都在同一个网络中,因此链接将自动完成。

这是一个更新的配置,它使用网络来代替:

version: "3"
services:
### DATABASE ###
db:
image: postgres:latest
environment:
- POSTGRES_PASSWORD=envpass
- POSTGRES_USER=envuser
- POSTGRES_DB=database
# Only add the ports here, if you want to access the database using an external client.
# ports:
# - "5433:5432"
networks:
- backend


### BACKEND ###
backend:
image: angularback
ports:
- "8082:8080"
depends_on:
- db
networks:
- backend
- frontend


### FRONTEND ###
frontend:
image: angularfront
ports:
- "8084:80"
depends_on:
- backend
networks:
- frontend

networks:
backend:
frontend:

当不在生产环境中运行时,我还建议将所有端口直接绑定(bind)到主机接口(interface)(127.0.0.1),以防止网络中的其他人访问您机器上的端口,如下所示:
ports:
- "127.0.0.1:8084:80"

关于angular - 为什么一个 Angular 容器需要一个暴露的端口来连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60823166/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com