首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Docker:从一个容器到另一个被搁置的容器的http请求

Docker:从一个容器到另一个被搁置的容器的http请求
EN

Stack Overflow用户
提问于 2019-02-22 18:00:18
回答 1查看 319关注 0票数 1

我使用VPS在线测试我的web应用程序。我使用Docker在同一台服务器上运行多个web应用。这是我的

docker-compose.yml

代码语言:javascript
复制
version: "3.7"

services:

  gateway:
    build:
      context: ./gateway
      dockerfile: Dockerfile
    restart: always
    ports:
      - 80:3000
    networks:
      erealm:
        ipv4_address: 10.5.0.2

  db:
    image: mysql/mysql-server:5.5
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: 4lf483t0
    networks:
      erealm:
        ipv4_address: 10.5.0.3

  phpmyadmin:
    image: nazarpc/phpmyadmin:latest
    environment:
      - MYSQL_HOST=10.5.0.3:3306
    restart: always
    depends_on:
      - db
    ports:
      - 1234:80
    networks:
      erealm:
        ipv4_address: 10.5.0.4

  static:
    build:
      context: ./static
      dockerfile: Dockerfile
    restart: always
    networks:
      erealm:
        ipv4_address: 10.5.0.5

  onlinecv:
    build:
      context: ./onlinecv
      dockerfile: Dockerfile
    restart: always
    ports:
      - 81:3000
    networks:
      erealm:
        ipv4_address: 10.5.0.10

  speeqapi:
    build:
      context: ./speeq/api
      dockerfile: Dockerfile
    restart: always
    environment:
      MYSQL_SERVER: 10.5.0.3
      MYSQL_PORT: 3306
      MYSQL_USER: xxxxxxxxxx
      MYSQL_PASSWORD: xxxxxxxxxx
      MYSQL_DATABASE: xxxxxxxxxx
    depends_on:
      - db
    networks:
      erealm:
        ipv4_address: 10.5.0.20

  speeqfe:
    build:
      context: ./speeq/fe
      dockerfile: Dockerfile
    restart: always
    environment:
      REACT_APP_API_SERVER: 10.5.0.20:3000
      REACT_APP_STATIC_SERVER: 10.5.0.5:3000
    ports:
      - 82:3000
    depends_on:
      - db
      - static
      - speeqapi
    networks:
      erealm:
        ipv4_address: 10.5.0.21

networks:
  erealm:
    driver: bridge
    ipam:
      config:
        - subnet: 10.5.0.0/24

这个方案背后的主要理念是只向世界开放HTTP端口,而所有必要的服务都由Docker内部网络保护运行,外部世界无法访问。

我使用网关服务将针对不同应用程序的HTTP请求映射到不同的端口。因此,我将我的在线简历映射到CNAME cv.eddealmeida.net,并将这个Speeq应用程序映射到我的DNS区域中的CNAME speeq.eddealmeida.net,两者都指向此服务器。当我的服务器接收到对http://cv.eddealmeida.nethttp://speeq.eddealmeida.net的请求时,基于节点/快速的网关应用程序(侦听端口80)拆分请求的主机参数,并应用一个简单的映射将请求分别发送到端口81和82。

好吧,一切都很好,除了内部请求。首先,我遇到了内部名称解析的问题,正如您可能看到的,我通过为所有服务提供IP解决了这个问题。

现在我的内部请求被送到了正确的地方,但是...speeq前端发出的fetch请求正在停止。他们只是一次又一次地拖延。我使用curl测试了该应用程序接口,一切正常,它正确地断定了我的命令行请求。所以,我的API /数据库连接或类似的东西没有问题。谷歌浏览器给了我这个explanation,但我看不出我适合上面提到的任何一种情况。

有没有人遇到过这样的情况来给我一个提示?在过去的24小时里,我一直在与此作斗争,但我已经没有想法了。我仔细检查了所有的东西,它仍然不能工作。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-02-26 16:33:45

我没有几个可能有帮助的假设。

1-关于I的使用,我建议尝试使用network aliases而不是I,这是一个长期的解决方案

2-我可以看到你正在使用ReactJS作为客户端的前端-我假设你在构建你的React应用程序后使用静态文件-在这种情况下,你需要通过端口映射或使用域名指向你的api正在侦听的公共ip或任何类似的方法将后端/api暴露到公共ip,以便使前端应用程序能够在你从浏览器(在你的情况下是一个不同的设备)打开它时访问它。因此,如果speeqfe是reactjs前端,则需要将指向其他容器的环境变量值更改为公共ip,以便在构建静态文件后使其正常工作

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54824521

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档