链接的docker-compose容器发出http请求

时间:2017-10-28 08:26:58

标签: docker docker-compose docker-for-mac

我已经在网上找了一段时间,并且找不到我的问题的解决方案,这与此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

在我的网络容器中,我向http://app:3030/historyhttp://app:3030/rules发出了http请求,但我没有看到请求找到应用容器的方式。我在浏览器控制台中看到的是此错误消息net::ERR_NAME_NOT_RESOLVED。我不确定为什么http请求不会进入应用容器,因为它已链接到Web容器。有什么想法吗?

1 个答案:

答案 0 :(得分:2)

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

使用主机文件

<强>的/ etc /主机

<IP> app 

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

使用javascript确定API网址

您可以使用javascript获取您应该用于api的网址

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

使用nginx

您可以创建nginx反向代理

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

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

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