【问题标题】:Why Docker compose link does not work in react app?为什么 Docker 撰写链接在反应应用程序中不起作用?
【发布时间】:2020-11-01 04:53:45
【问题描述】:

我有两个应用程序作为 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

错误是:

【问题讨论】:

  • 尝试将 depends_on: backend 放入 docker-compose 的前端容器配置中。容器是否独立工作(分别连接到 localhost 后端/前端)?
  • @k-wasilewski 谢谢你的建议,但我试过了。没有工作。顺便说一句,我找到了解决方案。我已将我的基本 url backedn:8080 更改为 localhost:8080。这很荒谬,但现在有效!

标签: reactjs spring-boot docker docker-compose


【解决方案1】:

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

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

【讨论】:

  • 它已经过时了,但我仍然想在这里添加评论:它可能在你的本地机器上工作。但是当您部署到服务器时,它可能无法正常工作。因为 #1 答案:脚本在用户的机器上执行,他的机器可能没有 localhost:8080 监听。
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 2022-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-05
    • 2020-04-04
    • 1970-01-01
    • 1970-01-01
    • 2020-02-18
    相关资源
    最近更新 更多