3

我在网上找了一段时间,还没有找到解决我的问题的方法,这类似于 StackOverflow 问题Docker HTTP-requests between containers。但是这个答案已经是我在我的电脑上做的事情了。我正在提供我的 docker-compose 文件

version: "3"
services:
  web:
    image: ecdavis15/tsn-web-server
    ports:
      - "3000:3000"
    links:
      - app
  app:
    image: ecdavis15/tsn-app-server
    ports:
      - "3030:3030"
    links:
      - mongo
  mongo:
    image: mongo
    ports:
      - "27017:27017"
    volumes:
      - ./data/db:/data/db

在我的 Web 容器中,我向http://app:3030/history或可能发出 http get 请求,http://app:3030/rules但我没有看到请求找到通往应用程序容器的方式。我在浏览器控制台中看到的是这个错误消息net::ERR_NAME_NOT_RESOLVED。我不确定为什么 http 请求没有进入应用程序容器,因为它已链接到 Web 容器。有任何想法吗?

4

1 回答 1

9

由于您进行 Ajax 调用,它将由客户端而不是服务器端的浏览器发送。因此,当您从<IP>:3000to调用app:3030API 时,您的浏览器不知道应用程序是什么。所以你能做的事情很少

使用主机文件

/etc/hosts

<IP> app 

然后当您使用 浏览应用程序时app:3000app:3030将自动指向正确的地址。

使用 javascript 确定 API url

您可以使用 javascript 来获取您应该用于 api 的 url

document.location.scheme + "://" + document.location.hostname + ":3030"

使用 nginx

您可以创建 nginx 反向代理

location / {
   proxy_pass http://localhost:3000;

   location /api {
      proxy_pass http://localhost:3030;
   }
}

这将需要在您的代码文件中进行一些更改,以便您使用/api

于 2017-10-28T19:02:20.390 回答