我似乎无法使用Docker VPN从网站向我的后端发送http请求。
我有这个docker-compose文件:
version: '3.7'
services:
frontend:
ports:
- 5001:5001
build: "./..."
restapi:
build: "./.../"
command: gunicorn rest.wsgi:application --bind 0.0.0.0:8000
expose:
- 8000
depends_on:
- db
db:
image: postgres:10.5-alpine
volumes:
- postgres_data:/var/lib/postgresql/data/
现在,我正在从我的响应前端发送发帖请求
axios.post('http://restapi:8000/rest/', {data}, {headers})
->请求只是失败而从未到达我的restapi服务
如果我将我的容器放入容器docker exec -it "container-id" sh
中,然后向URL发送了一个wget
(卷曲)请求,则一切正常。
我假设,一旦网站在浏览器中运行,我就离开了容器,因此离开了docker的VPN?
但是如何从React前端跨容器发出请求?
答案 0 :(得分:2)
您的容器可以通过服务名称彼此看到。但是浏览器正在尝试以客户端身份访问。因此,是的,当您部署到VM时,一切都会正常。要测试本地部署,客户端需要知道restapi所在的位置,因此您需要将其包含在主机中:
<docker-ip or localhost> restapi
更新:如果后端在前端中也可用,请使用相对路径。
axios.post('/rest/', {data}, {headers})