首页 > 解决方案 > 在 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-appreact( 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. 他们都没有为我工作。

我一直在搜寻互联网,但我真的找不到解决方案。

标签: dockerdocker-composedocker-networking

解决方案


React 应用程序在最终用户的浏览器中运行,它根本不知道这个“Docker”的存在,也不知道任何 Docker Compose 网络设置。对于碰巧托管在 Docker 之外的浏览器应用程序,需要将它们配置为使用主机的DNS 名称或 IP 地址,以及后端服务的已发布端口。

一个常见的设置(Docker 或其他)是将浏览器应用程序和后端应用程序放在反向代理后面。在这种情况下,您可以使用没有主机名的相对 URL,例如/api/...,它们将被解释为“相同的主机和端口”,这完全绕过了这个问题。


推荐阅读