【问题标题】:Docker container does not communicate with others in same docker network(bridge)Docker 容器不与同一个 docker 网络(网桥)中的其他人通信
【发布时间】:2020-07-05 16:48:31
【问题描述】:

我正在尝试在亚马逊网络服务器上设置网络服务器的环境。 我想使用 django、react、nginx,它们在每个 docker 容器上运行。

下面是运行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", ... },
  }
}]

所以,我希望下面的反应代码可以工作。但它只适用于我的笔记本电脑,它具有与 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

我做错了什么?


这些是我settings.py django 文件中的代码。

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 并不是真正的问题......我说的对吗?


我发现 ajax await fetch('http://127.0.0.1:8000/api/'); 的 'localhost' 确实意味着客户端(浏览器)。

我必须在那里使用服务器的公共 IP 吗?

【问题讨论】:

    标签: django reactjs docker nginx


    【解决方案1】:

    您不能通过127.0.0.1 拨打电话。相反,您需要使用正在运行的容器的名称。像这样:

    const res = await fetch('django-server:8000/api/');
    

    【讨论】:

    • 感谢您的回复。我已经尝试过,但出现了 CORS 问题。所以我只添加了'http://',我得到了这个错误。 GET http://django-server:8000/api/ net::ERR_NAME_NOT_RESOLVED
    • 如果您遇到 CORS 问题,那么您需要从 django 服务器而不是 docker 解决它
    • 我已经附加了关于这个问题的更多细节......请注意。
    • 你能不能创建一个网络,然后添加dockers,最后将网络名称添加到CORS_ORIGIN_WHITELIST
    • 我创建了一个名为“my-network”的网桥并将所有容器移动到该网桥中。但是CORS_ORIGIN_WHITELIST 会犯这样的错误。 ?: (corsheaders.E013) Origin 'my-network' in CORS_ORIGIN_WHITELIST is missing scheme or netloc HINT: Add a scheme (e.g. https://) or netloc (e.g. example.com).
    猜你喜欢
    • 2020-04-17
    • 2022-01-21
    • 1970-01-01
    • 2022-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多