无法在Docker容器之间发出HTTP请求

时间:2019-09-13 22:38:38

标签: javascript docker docker-compose

我有2个应用程序在docker-compose下作为服务运行。

  1. 反应应用
  2. Node.js服务器

我正在尝试通过调用以下命令从我的React应用向Node.js服务器发出HTTP请求: fetch("http://backend:4000/")

GET http://backend:4000/ net::ERR_NAME_RESOLUTION_FAILED下访问我的React应用时,我在浏览器中得到http://localhost:3000

这是我的docker-compose文件。

version: "3.7"

services:
  frontend:
    build:
      context: ./frontend
    volumes:
      - ./frontend:/app
    ports:
      - "3000:3000"
    depends_on:
      - "backend"

  backend:
    build:
      context: ./backend
    volumes:
      - ./backend:/app

我正在运行Ubuntu,多年来一直遇到这个问题。没有任何真正的帮助-创建网络并向其分配服务,创建链接等。

一件奇怪的事是,当我进入React应用程序容器并运行bash命令时: ping backendcurl http://backend:4000,该请求实际上可以正常工作。

2 个答案:

答案 0 :(得分:0)

version: "3.7"

services:
  frontend:
    build:
      context: ./frontend
    volumes:
      - ./frontend:/app
    ports:
      - "3000:3000"
    depends_on:
      - "backend"
    links:
      - backend

  backend:
    container_name: backend
    build:
      context: ./backend
    volumes:
      - ./backend:/app

错误的选项

links:
  - "backend:test"

"backend:test"是您收到名称解析错误的原因。 那不是服务名称,backend是。

答案 1 :(得分:0)

我的猜测是,您正在尝试通过浏览器而不是前端容器来连接后端应用程序。如果是这种情况,那么您应该像这样显示后端端口;

  backend:
    container_name: backend
    build:
      context: ./backend
    volumes:
      - ./backend:/app
    ports:  #whatever the port number
      - "4000:4000"

然后,您应在React应用中将网址从http://backend:4000更改为http://localhost:4000