2 votes

Comment connecter deux conteneurs Docker exécutant react et python

J'ai docker-compose.yml pour faire apparaître deux conteneurs docker.

1.) front-end - reactjs - en cours sur le port 3000

2.) back-end - python ( flask ) - fonctionnant sur le port 8083

Le front-end appelle le python pour un POST par l'intermédiaire de l'url "http://127.0.0.1:8083/api en utilisant axios mais maintenant, comme ils sont exécutés dans deux conteneurs, comment puis-je connecter le frontal à l'interface de l'entreprise ? python à travers cette url ?

C'est mon docker-compose.yml

version: "3.2"

services:

  frontend:
    build: ./frontend
    environment:
      CHOKIDAR_USEPOLLING: "true"
    volumes:
      - /app/node_modules
      - ./frontend:/app
    ports:
      - 80:3000
    depends_on: 
      - backend

  backend: 
    build: ./backends/jananath
    volumes:
      - ./backends/jananath:/usr/src/app
    environment:
      FLASK_APP: /usr/src/app/server.py
      FLASK_DEBUG: 1
      FLASK_RUN_EXTRA_FILES: "/usr/src/app/banuka.txt"
    ports: 
      - 5000:8083

Et c'est le server.py serveur python

from flask import Flask, render_template, request, url_for, redirect
import os
from os import path, walk
from flask_cors import CORS

app = Flask(__name__)
CORS(app)

PORT = 8083

@app.route('/api', methods=['POST', 'GET'])
def upload_file():
    file = request.files['file']
    filename = file.filename

    print(filename)

    filepath = os.path.abspath(filename)
    print(filepath)
    response_ = {}
    response_['filename'] = str(filename)
    response_['filepath'] = str(filepath)
    return response_

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=PORT, extra_files=extra_files)

Et c'est le axios appeler un POST méthode de front-end à ce server.py

const onFormSubmit = async (e) => {
    e.preventDefault();

    const formData = new FormData();
    formData.append("file", file);

    try {

      const res = await axios.post("http://127.0.0.1:8083/api", formData, { // this url should change now?
        headers: {
          "Content-Type": "multipart/form-data",
          "Access-Control-Allow-Credentials": "true",
          "crossorigin": "true",
        },
      });

      const {filename, filepath} = res.data;

      setUploadedFile({filename, filepath});
    } catch (error) {
      console.log(error);
    }
  };

Je pense que le problème ici est que l'URL est maintenant changé, mais je ne sais pas comment réparer cela. Quelqu'un peut-il me dire comment le corriger et quelle est l'URL correcte à utiliser ?

Merci !

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X