我有2个容器正在运行:
/usr/share/nginx/html
。为什么我不能为/search
发出GET请求,以便后端处理此请求?
我总是在浏览器的控制台中获得net::ERR_CONNECTION_REFUSED
,即使我已将它们链接起来。
这是我的配置:
services:
backend:
image: docker.xxxxx.net/yyyyyy/zzzzzzzz:latest
expose:
- "8080"
ports:
- "8333:8080"
frontend:
build:
dockerfile: Dockerfile
context: .
depends_on:
- "backend"
links:
- backend
ports:
- "80:80"
volumes:
- ./build:/usr/share/nginx/html
重要提示,在另一台服务器上启动后端允许我进行API调用(唯一出现的问题是CORS),因此后端代码没问题且问题必须在错误的docker配置中。
我可以清楚地打开前端,但是我无法进行任何API调用:我已经尝试了许多类似调用的东西:
http://backend/search?q=test
http://backend:8080/search?q=test
http://backend:8333/search?q=test
http://frontend/search?q=test
http://frontend:8080/search?q=test
http://frontend:8333/search?q=test
结果是一样的。什么可能是错的?
答案 0 :(得分:2)
我假设GET请求来自您的浏览器,即来自主机NOT而不是来自前端容器。根据您的配置,8080从后端容器暴露到前端容器,端口8333暴露给docker主机。因此http://backend:8080
只能从前端容器中看到,而不能从主机看到。因此,可能必须http://<docker_ip>:8333/search?q=test
才能从后端容器获取响应。
答案 1 :(得分:0)
尝试通过docker提供的环境变量与源码头进行通信。见this
答案 2 :(得分:0)
使用nginx处理您的CORS错误。
在你的nginx.conf中配置一个反向代理。
server {
listen 80 default_server;
server_name _;
location /search {
proxy_pass http://backend:8080;
}
...
}
此(或类似)应解决您的net :: ERR_CONNECTION_REFUSED权限错误