【问题标题】:Http request between two containers两个容器之间的 Http 请求
【发布时间】:2020-05-05 10:32:30
【问题描述】:

我正在创建一个 Web 服务,它在前端使用 react,后端使用 django REST。两者都在单独的 docker 容器中运行。我的 docker-compose 文件如下所示。

services: 
 db:
  image: postgres
  volumes:
    - ./config/load.sql:/docker-entrypoint-initdb.d/init.sql
  environment:
    - POSTGRES_DB=postgres
    - POSTGRES_USER=postgres
    - POSTGRES_PASSWORD=postgres
web:
  build: .
  image: gudmundurorri4/hoss-web
  command: python manage.py runserver 0.0.0.0:8000
  volumes:
    - .:/code
  stdin_open: true
  ports:
    - "8000:8000"
  depends_on:
    - db
frontend:
  image: gudmundurorri4/hoss-frontend
  stdin_open: true
  ports:
    - "3000:3000"
  depends_on:
    - "web"

Web 和前端容器都可以正常工作。当我在浏览器中打开它并且从前端容器中对http://web:8000 执行获取请求时,后端工作,我得到正确的响应。但是,当我使用相同的地址 (http://web:8000) 从我的 react 应用程序执行 GET 请求时,它总是失败并出现错误

net::ERR_NAME_NOT_RESOLVED

【问题讨论】:

  • 你的 React 应用在哪里运行?

标签: django reactjs amazon-web-services docker docker-compose


【解决方案1】:

Compose 服务名称只存在于容器本身中(使用本地 DNS 魔法设置)。

从您(或用户)浏览器的角度来看,不存在 http://web:8000 这样的东西。

你必须要么

  • 使用您的用户可以访问的端口和 DNS 名称发布后端,例如https://backend.myservice.kittens/ 并让在浏览器中运行的前端从那里请求东西(注意 CORS)。
  • 或者让前端服务代理这些请求到后端(it 可以通过http://web:8000/ 访问)。如果您使用的是 webpack-dev-server,它内置了此功能。

【讨论】:

    猜你喜欢
    • 2016-12-27
    • 2023-02-09
    • 2019-10-15
    • 1970-01-01
    • 2019-02-13
    • 2021-09-26
    • 2020-08-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多