如何使用Docker容器在Frontend和Backend之间进行REST调用

时间:2018-06-14 10:31:49

标签: apache docker spring-boot docker-compose

我有3个泊坞容器:

后端(Spring boot rest api) 前端(apache图像中的Js和html) mongodb的

我通过docker-compose编排它们并且运行良好。

但是我不知道如何让我的前端javascript客户端知道后端容器的主机/ ip以便到达它。

这是我的docker-compose.yml:

version: '3.1'

services:
  project-server:
    build: .
    restart: always
    container_name: project-server
    ports:
      - 8200:8200
    working_dir: /opt/app
    depends_on:
      - mongo

  httpd:
    image: project-ui
    container_name: project-ui
    ports:
      - 8201:80


  mongo:
    image: project-mongo
    container_name: project-mongo
    ports:
      - 27018:27017
    volumes:
      - $HOME/data/mongo-data:/data/db
      - $HOME/data/mongo-bkp:/data/bkp
    restart: always

所以我在我的js客户端应用程序中试过这个:

export default {
  REMOTE_HOST: 'http://project-server:8200'
}

但它不起作用。 (无法加载资源:net :: ERR_NAME_NOT_RESOLVED)

我很确定这是因为JS在浏览器上本地运行,因此无法解决问题。

这样做的正确方法是什么?前端服务(apache)有什么方法可以将真正的主机传递给Javascript并以某种方式获取它?

非常感谢

1 个答案:

答案 0 :(得分:1)

project-server只能在docker-compose创建的网络中解析。如您所述,要从外部世界进行连接,您需要导出主机的IP而不是project-server。问题是来宾容器不知道来宾的IP。以下是对此的详细讨论:How to get the IP address of the docker host from inside a docker container

在您的情况下,您可能需要运行容器,将主机的IP作为环境变量传递:

run --env <IP>=<value>

然后在节点中你可以读取该变量。 希望它有所帮助