Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/visual-studio-code/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular 通过docker容器调用RESTAPI_Angular_Docker - Fatal编程技术网

Angular 通过docker容器调用RESTAPI

Angular 通过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

我已经使用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/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(例如调用
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?