docker - 在docker-compose服务之间进行通讯时遇到问题

标签 docker docker-compose docker-networking

我有以下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(Python flask应用程序):
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(用于api的测试react应用程序):
# 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。我尝试了以下网址的各种排列:http://scraper-api:80/api/test_api。他们都没有为我工作。

我一直在清理互联网,却找不到真正的解决方案。

最佳答案

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

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

关于docker - 在docker-compose服务之间进行通讯时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56986176/

相关文章:

docker - 多播未发送到所有 Docker 容器

Dockerfile:创建用户可以看到的ENV变量?

docker - 更改Docker Swarm管理器的Linux主机名是否会导致其丢失Swarm Manager状态?

nginx - Docker:是否可以在没有卷的情况下在 2 个容器之间共享数据?

MongoDB 在带有 docker 的设备上没有剩余空间

docker - 如何让两个运行 flask 服务和 golang 服务的 docker 容器相互通信?

spring-boot - 如何将 Web 应用程序文件夹加载到 docker 容器

macos - OS X 上没有/var/run/docker.sock

Docker - 由 docker-compose 启动的容器,将文件所有权更改为 root

bash - Docker 断开所有容器与 docker 网络的连接