Linked docker-compose 容器发出 http 请求
Linked docker-compose containers making http requests
我在网上找了一段时间,但没有找到解决我的问题的方法,这个问题类似于这个 Whosebug 问题 。但是这个答案已经是我在我的电脑上做的了。我正在提供我的 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://app:3030/rules
发出了一个 http get 请求,但我没有看到该请求找到通往应用程序容器的路径。我在浏览器控制台中看到的是这条错误消息 net::ERR_NAME_NOT_RESOLVED
。我不确定为什么 http 请求没有进入应用程序容器,因为它链接到 Web 容器。有什么想法吗?
由于您进行了 Ajax 调用,它将由客户端而不是服务器端的浏览器发送。因此,当您从 <IP>:3000
调用 app:3030
以获得 API 时,您的浏览器不知道应用程序是什么。所以你能做的事情很少
使用主机文件
/etc/hosts
<IP> app
然后当您使用app:3000
浏览应用程序时,app:3030
会自动指向正确的地址。
使用javascript确定APIurl
您可以使用 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
我在网上找了一段时间,但没有找到解决我的问题的方法,这个问题类似于这个 Whosebug 问题
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://app:3030/rules
发出了一个 http get 请求,但我没有看到该请求找到通往应用程序容器的路径。我在浏览器控制台中看到的是这条错误消息 net::ERR_NAME_NOT_RESOLVED
。我不确定为什么 http 请求没有进入应用程序容器,因为它链接到 Web 容器。有什么想法吗?
由于您进行了 Ajax 调用,它将由客户端而不是服务器端的浏览器发送。因此,当您从 <IP>:3000
调用 app:3030
以获得 API 时,您的浏览器不知道应用程序是什么。所以你能做的事情很少
使用主机文件
/etc/hosts
<IP> app
然后当您使用app:3000
浏览应用程序时,app:3030
会自动指向正确的地址。
使用javascript确定APIurl
您可以使用 javascript 获得您应该用于 api
的 urldocument.location.scheme + "://" + document.location.hostname + ":3030"
使用 nginx
您可以创建nginx反向代理
location / {
proxy_pass http://localhost:3000;
location /api {
proxy_pass http://localhost:3030;
}
}
这需要对您的代码文件进行一些更改,以便您使用 /api