加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

reactjs-Docker-将HTTP请求从一个容器发送到另一个

发布时间:2020-12-16 03:25:41 所属栏目:安全 来源:网络整理
导读:在AWS服务器生产上运行应用程序时,无法向后端容器发送HTTP请求.但是,当我在本地运行应用程序时,我可以向后端提出请求.对于发出请求,我使用访存: fetch('http://localhost:8000/something') 这是项目结构的样子: .├── docker-compose.yml|├── backend

在AWS服务器生产上运行应用程序时,无法向后端容器发送HTTP请求.但是,当我在本地运行应用程序时,我可以向后端提出请求.对于发出请求,我使用访存:

fetch('http://localhost:8000/something')

这是项目结构的样子:

.
├── docker-compose.yml
|
├── backend
│?? ├── Dockerfile
│?? └── server.js
|
└── frontend
    ├── Dockerfile
    ├── package.json
    ├── public
    │?? └── index.html
    └── src
    ?? ├── components
    ?? ├── data
    ?? ├── index.js
    ?? ├── routes.js
    ?? ├── static
    ?? ├── tests
    ?? └── views

docker-compose.yml:

version: '3'

services:
  frontend:
    build:
      context: .
      dockerfile: frontend/Dockerfile
    volumes:
      - ./frontend:/frontend
    ports:
      - "80:5000"
    links:
      - backend
  backend:
    build:
      context: .
      dockerfile: backend/Dockerfile
    volumes:
      - ./backend:/backend
    ports:
      - "8000:8000"

前端中的Dockerfile:

FROM node:latest

RUN mkdir -p /frontend

WORKDIR /frontend

ADD . /frontend

VOLUME ["/frontend"]

EXPOSE 5000

CMD yarn && yarn build && yarn global add serve && serve -s build

后端中的Dockerfile:

FROM node:latest

RUN mkdir -p /backend

WORKDIR /backend

ADD . /backend

VOLUME ["/backend"]

EXPOSE 8000

CMD yarn && yarn start

有人可以解释一下我的配置有什么问题吗?我很困惑,因为它在本地没有任何问题.

最佳答案
TLDR:需要更改前端代码以调用当前主机,而不是“ localhost”

问题是从您的浏览器访问时,您的应用在说“嘿本地主机”而不是“嘿VPS ip”.您需要编辑前端代码才能访问当前要访问的主机.这就是为什么您在本地主机服务器上收到请求的原因.

代替fetch(“ http:/// localhost:8000 / something”)将其更改为fetch(“ http://” location.host“:8000”)(有更好的方法,可以完成此操作).

还要注意,Docker容器在网络方面也有所不同. Docker容器实际上没有非Docker容器应用程序一样的“本地主机”概念.从服务器到服务器进行呼叫时,必须使用VPS的IP /本地IP.我使用的一个技巧是使用docker的默认docker0网桥172.17.0.1.

我倾向于通过“链接”使用网络,但实际上无法对其进行完整评论,但是当容器位于同一docker网络上时,您可以使用容器的名称访问其他容器.但是,这仅适用于服务器端代码,即:node.js server-> node.js服务器/ mongo数据库.示例mongodb连接将为mongodb:// mongo_server:27017 / mydatabase,而mongo_server将解析为容器的IP.

尝试使用IP时,您可能会遇到的另一件事是防火墙,您还必须允许该特定IP /端口通过防火墙.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读