我使用VPS在线测试我的web应用程序。我使用Docker在同一台服务器上运行多个web应用。这是我的
docker-compose.yml
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.net或http://speeq.eddealmeida.net的请求时,基于节点/快速的网关应用程序(侦听端口80)拆分请求的主机参数,并应用一个简单的映射将请求分别发送到端口81和82。
好吧,一切都很好,除了内部请求。首先,我遇到了内部名称解析的问题,正如您可能看到的,我通过为所有服务提供IP解决了这个问题。
现在我的内部请求被送到了正确的地方,但是...speeq前端发出的fetch请求正在停止。他们只是一次又一次地拖延。我使用curl测试了该应用程序接口,一切正常,它正确地断定了我的命令行请求。所以,我的API /数据库连接或类似的东西没有问题。谷歌浏览器给了我这个explanation,但我看不出我适合上面提到的任何一种情况。
有没有人遇到过这样的情况来给我一个提示?在过去的24小时里,我一直在与此作斗争,但我已经没有想法了。我仔细检查了所有的东西,它仍然不能工作。
发布于 2019-02-26 16:33:45
我没有几个可能有帮助的假设。
1-关于I的使用,我建议尝试使用network aliases而不是I,这是一个长期的解决方案
2-我可以看到你正在使用ReactJS作为客户端的前端-我假设你在构建你的React应用程序后使用静态文件-在这种情况下,你需要通过端口映射或使用域名指向你的api正在侦听的公共ip或任何类似的方法将后端/api暴露到公共ip,以便使前端应用程序能够在你从浏览器(在你的情况下是一个不同的设备)打开它时访问它。因此,如果speeqfe是reactjs前端,则需要将指向其他容器的环境变量值更改为公共ip,以便在构建静态文件后使其正常工作
https://stackoverflow.com/questions/54824521
复制相似问题