Angular 通过docker容器调用RESTAPI
我已经使用spring boot开发了后端Rest API,使用angular 8开发了前端Rest API我的问题是我已经通过docker compose在同一台服务器上部署了后端和前端我需要一种方法通过docker容器和网络创建angular调用Rest API,而不暴露我的后端Rest API我已经尝试使用其容器调用后端Rest API名称为angular,但它不起作用 来自angular的API链接示例http://shop_soofybackendservice/api/departmentsAngular 通过docker容器调用RESTAPI,angular,docker,Angular,Docker,我已经使用spring boot开发了后端Rest API,使用angular 8开发了前端Rest API我的问题是我已经通过docker compose在同一台服务器上部署了后端和前端我需要一种方法通过docker容器和网络创建angular调用Rest API,而不暴露我的后端Rest API我已经尝试使用其容器调用后端Rest API名称为angular,但它不起作用 来自angular的API链接示例http://shop_soofybackendservice/api/departm
version: '3'
services:
database:
image: mysql:8.0.15
environment:
MYSQL_ROOT_PASSWORD: password
MYSQL_DATABASE: dbname
volumes:
- databasevolume:/var/lib/mysql
networks:
- databasenetwork
deploy:
mode: replicated
replicas: 1
labels: [ database=MYSQL_DATABASE ]
soofybackendservice:
image: tomcatsoofybackend:latest
#build:
# context: ./onlineshopping/soofy-trade
# dockerfile: Dockerfile
environment:
mysqlhost: shop_database
mysqlupassword: 123456
mysqluname: root
imagesPath: /home/ubuntu/images
volumes:
- imagesvolume:/home/ubuntu/images
ports:
- 81:8080
depends_on:
- database
networks:
- databasenetwork
- backendnetwork
deploy:
mode: replicated
replicas: 1
labels: [ backend=backendWep ]
#tomcatsoofyfrontend
#http://backend.medodolphin.com/
soofyfrontendservice:
image: mealfrontend:latest
#build:
# context: ./onlineshopping/soofy-frontend
# dockerfile: Dockerfile
ports:
- 82:80
depends_on:
- database
networks:
- backendnetwork
deploy:
mode: replicated
replicas: 1
labels: [ frontend=frontendWeb ]
volumes:
databasevolume:
imagesvolume:
networks:
databasenetwork:
backendnetwork:
服务之间通信的正确URL(例如调用
soofybackendservice
)是docker compose中的服务名称。在您的情况下,它是soofybackendservice
,因此endpoit是http://soofybackendservice:8080/api/departments
如果应用程序正在从远程浏览器/主机调用端点,则需要调用
http://:81/api/departments
Angular可能正在进行客户端调用。您需要相应地修改和配置URL。您可能需要在API url中指定localhost。不起作用注意:我添加了shop,因为当我运行docker compose时,我使用的是docker stack deploy--compose file docker-compose.yml shop命令,默认情况下,shop添加到所有服务名称您的Angular应用程序位于公共网络、Internet、,并且对运行后端的本地专用网络一无所知。您需要一个与后端共享同一网络并映射到公共端口的代理容器。@mtovmassian当然,我假设调用来自tomcatsoofyfrontend
容器。我更新了答案。谢谢你指出。@jordanvrtanoski你的第二个答案是正确的,我已经做到了,工作正常,但我的问题是ana one能够使用我的端点,我知道有些东西像JWT和auth2,但我认为我不会公开我的端点,让angular应用程序通过我的私人网络使用端点,是吗诸如此类?@hossanhany要与端点通话,您需要与端点建立网络连接,因此您无法避免在internet上暴露端点,但您可以通过添加安全层(例如代理、SSL、访问证书等)进行控制和保护。好的,我可以理解你,但我的问题是,有什么东西不能公开我的API并通过angular通过我的专用网络访问它,还是我必须公开API?