为什么 Docker 撰写链接在react应用程序中不起作用?

IT技术 reactjs spring-boot docker docker-compose
2021-05-25 04:06:06

我有两个应用程序作为 docker 容器。ReactJS 作为前端,springboot 应用程序作为后端。

当我在 Windows docker 桌面工具箱上启动两个应用程序时,由于后端 api 不可访问,我无法从前端登录。我所有的容器都使用默认网络。

在react应用程序中,我使用此链接访问后端 API_URL: 'http://backend:8080/api/'

docker-compose.yml 在这里。

backend:
container_name: backend
image: backend:2.0.1b4
command: sh -c "/wait && catalina.sh run"
ports:
  - 8080:8080
environment:
  - ROTATOR_CLIENT=agent_url:9091
  - MAST_CLIENT=agent_url:9092
  - working-environment=RLAS
  - DB_URL=jdbc:postgresql://postgres_url:5432/postgres?schema=public
  - DB_USER=postgres
  - DB_PASSWORD=postgres
  - WAIT_HOSTS=postgres_url:5432
  - WAIT_SLEEP_INTERVAL=5
external_links:
  - database:postgres_url
  - agent:agent_url
restart: always


frontend:
    container_name: frontend
    image: frontend:2.0.1b4
    ports:
      - 3000:3000
    environment:
      - base_url=backend_url:9090
    external_links:
      - backend:backend_url
    restart: always

错误是: 在此处输入图片说明

2个回答

正如您所发现的,您必须使用http://localhost:8080而不是http://backend:8080作为 URL。

这是因为客户端使用 JavaScript 获取数据发生在您的浏览器中,而不是在容器内。因此,这发生在 docker 网络之外。

我刚刚将我的 API_URL: 'http:// backend :8080/api/' 更改为 API_URL: 'http:// localhost :8080/api/'

现在工作正常!我不知道它是如何工作的!