【问题标题】:Flask and React Docker containers not communicating via Docker-ComposeFlask 和 React Docker 容器不通过 Docker-Compose 进行通信
【发布时间】:2020-01-08 08:05:39
【问题描述】:

我有两个容器 - 一个包含一个 react 应用,另一个包含一个烧瓶应用。

我可以使用以下 docker-compose 文件及其各自的 Dockerfile 进行构建,并且能够通过指定端口上的浏览器访问每个文件。但是,我的 React 应用程序对 Flask 的 API 调用没有被检索(它们在图片中没有 Docker 的情况下工作)。

非常感谢任何建议!

Docker-compose

version: '3.7'

services:
    middleware:
        build: ./middleware
        command: python main.py run -h 0.0.0.0
        volumes:
          - ./middleware/:/usr/src/app/
        ports:
          - 5000:5000
        env_file:
          - ./middleware/.flaskenv
    frontend:
        build:
          context: ./frontend/app
          dockerfile: Dockerfile
        volumes:
          - './frontend/app:/usr/src/app'
          - 'usr/src/app/node_modules'
        ports:
          - '3001:3000'
        environment:
          - NODE_ENV=development
        links:
          - middleware

Flask 应用程序的 Dockerfile

# pull official base image
FROM python:3.8.0-alpine

# set work directory
WORKDIR /usr/src/app

# set environment variables
ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1

# install dependencies
RUN pip install --upgrade pip
COPY ./requirements.txt /usr/src/app/requirements.txt
RUN pip install -r requirements.txt

# copy project
COPY . /usr/src/app/

Dockerfile React 应用程序

# base image
FROM node:12.2.0-alpine

# set working directory
WORKDIR /usr/src/app

# add `/usr/src/app/node_modules/.bin` to $PATH
ENV PATH /usr/src/app/node_modules/.bin:$PATH

# install and cache app dependencies
ADD package.json /usr/src/app/package.json
RUN npm install --silent
RUN npm install react-scripts@0.9.5 -g --silent

# start app
CMD ["npm", "start"]

我在 package.json 的 React 应用程序中也有以下内容,这使我能够对烧瓶应用程序进行 API 调用(同样,这在没有 Docker 的情况下也可以正常工作)

  "proxy": "http://127.0.0.1:5000",

最后,项目结构(如果有用的话)

website
|
|--middleware (Flask app)
  - Dockerfile
  - api
|--frontend (React app)
  -Dockerfile
  -app
|
|-docker-compose.yml

【问题讨论】:

  • "proxy": "http://127.0.0.1:5000", 更改为"proxy": "http://middleware:5000",
  • 当您需要在 docker 网络中从另一个服务访问一个服务时,使用 docker 服务名称(middleware, frontend)。避免使用127.0.0.1,因为它解析为容器本身,而不是您假设的 docker 主机。
  • 繁荣,谢谢你们!成功了

标签: docker docker-compose


【解决方案1】:

正如 cmets 中的 LinPy 和 leopal 所指出的,需要更改 package.json 中的 127.0.0.1 以引用正确的烧瓶容器。

"proxy": "http://middleware:5000",

【讨论】:

    猜你喜欢
    • 2019-03-07
    • 1970-01-01
    • 2021-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-22
    • 1970-01-01
    相关资源
    最近更新 更多