我正在尝试在amazon web服务器上设置web服务器的环境。我想使用django、react、nginx,它们在每个docker容器上运行。
Belows是用于运行docker容器的命令。
sudo docker run --name django-server
-it -d -p "8000:8000"
--volume=$(pwd)/trello-copy-django-src:/backend/trello-copy
django-server
sudo docker run --name nginx-server
-d -p "80:80"
--volumes-from react-server
nginx-server
我并没有指定一个自定义的docker网桥,我通过键入$ docker inspect bridge
来检查它们是否在同一个默认网桥上。
[{
"Name": "bridge",
...,
"Containers": {
"...": { "Name": "django-server", ... },
"...": { "Name": "react-server", ... },
"...": { "Name": "nginx-server", ... },
}
}]
所以,我希望下面的react代码能正常工作。但它只适用于我的笔记本电脑,它和aws的docker结构完全相同。
...
const res = await fetch('http://127.0.0.1:8000/api/');
...
Failed to load resource: net::ERR_CONNECTION_REFUSED
127.0.0.1:8000/api/:1
我做错了什么?
这些是django的settings.py
文件中的代码。
CORS_ORIGIN_ALLOW_ALL=True # only for dev
CORS_ALLOW_CREDENTIALS=True # only for dev
CORS_ORIGIN_WHITELIST = (
'http://localhost',
'http://localhost:3000',
)
CORS消息为App.js:10 Fetch API cannot load django-server:8000/api/. URL scheme must be "http" or "https" for CORS request.
。
我认为这是另一个问题,然后django和CORS并不是真正的问题。。。我说得对吗?
我发现ajaxawait fetch('http://127.0.0.1:8000/api/');
的"localhost"实际上意味着客户端(浏览器(。
我必须在那里使用服务器的公共IP吗?
您不能通过127.0.0.1
调用。相反,您需要使用正在运行的容器的名称。像这样:
const res = await fetch('django-server:8000/api/');