docker - 在 docker-compose 服务之间进行通信时遇到问题
问题描述
我有以下docker-compose
文件:
version: "3"
services:
scraper-api:
build: ./ATPScraper
volumes:
- ./ATPScraper:/usr/src/app
ports:
- "5000:80"
test-app:
build: ./test-app
volumes:
- "./test-app:/app"
- "/app/node_modules"
ports:
- "3001:3000"
environment:
- NODE_ENV=development
depends_on:
- scraper-api
其中构建了以下内容Dockerfile
:
scraper-api
(一个pythonflask
应用程序):
FROM python:3.7.3-alpine
WORKDIR /usr/src/app
COPY requirements.txt ./
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
CMD ["python", "./app.py"]
test-app
react
( api的测试应用程序):
# base image
FROM node:12.2.0-alpine
# set working directory
WORKDIR /app
# add `/app/node_modules/.bin` to $PATH
ENV PATH /app/node_modules/.bin:/app/src/node_modules/.bin:$PATH
# install and cache app dependencies
COPY package.json /app/package.json
RUN npm install --silent
RUN npm install react-scripts@3.0.1 -g --silent
RUN npm install axios -g
# start app
CMD ["npm", "start"]
诚然,我是 Docker 网络的新手,但我正试图让react
应用程序与scraper-api
. 例如,scraper-api
具有以下端点:/api/top_10
. 我尝试了以下 url 的各种排列:
http://scraper-api:80/api/test_api
. 他们都没有为我工作。
我一直在搜寻互联网,但我真的找不到解决方案。
解决方案
React 应用程序在最终用户的浏览器中运行,它根本不知道这个“Docker”的存在,也不知道任何 Docker Compose 网络设置。对于碰巧托管在 Docker 之外的浏览器应用程序,需要将它们配置为使用主机的DNS 名称或 IP 地址,以及后端服务的已发布端口。
一个常见的设置(Docker 或其他)是将浏览器应用程序和后端应用程序放在反向代理后面。在这种情况下,您可以使用没有主机名的相对 URL,例如/api/...
,它们将被解释为“相同的主机和端口”,这完全绕过了这个问题。
推荐阅读
- microservices - 如何使用 vert.x 对运行在不同服务器上的两个微服务进行集群?
- java - Java ResourceBundle.getBundle 如何加载属性文件?
- spring-mvc - 将列表对象从 thymeleaf 发送到控制器
- python-3.x - 从 CSV 文件中删除标题
- javascript - 如何使用 JavaScript 将文本从一个字段复制到另一个选项卡菜单的字段?
- php - 致命错误:在布尔值上调用成员函数 getData()
- python - ColumnTransformer 和 FeatureUnion 之间的 Scikit-Learn 管道代码差异
- android - android studio 导入 GreenDao 后无法解析 DaoMaster
- c++ - Valgrind 插入排序的大小为 8 的无效读取
- image - 更改图片时如何销毁缓存图像