首页 > 解决方案 > 通过docker容器调用rest API

问题描述

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

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:

标签: angulardocker

解决方案


服务之间通信的正确 URL(例如tomcatsoofyfrontend调用soofybackendservice)是 docker-compose 中服务的名称。在你的情况下它是soofybackendservice,因此端点是http://soofybackendservice:8080/api/departments

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


推荐阅读