通过docker容器调用rest API



我使用spring boot和使用angular 8的frontEnd开发了后端Rest API,我的问题是我通过docker-compose在同一服务器中部署了后端和前端,我需要一种方法来通过docker容器和网络调用angular Rest API,而不暴露我的后端Rest API,我曾试图在angular中使用其容器名称调用后端,但它不起作用来自angular的API链接示例http://shop_soofybackendservice/api/departments

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(例如,tomcatsoofyfrontend调用soofybackendservice)是docker-compose中服务的名称。在你的例子中,它是soofybackendservice,因此终点是http://soofybackendservice:8080/api/departments

如果您的应用程序从远程浏览器/主机调用端点,那么您需要调用http://<<ip or the domain name of docker host>>:81/api/departments

Angular很可能会进行客户端调用。您需要公开api并相应地配置URL。您可能需要在API url中指定localhost

最新更新