docker-compose getJSON из restful API блокируется - PullRequest
0 голосов
/ 17 февраля 2019

Я запускаю приложение фляги вместе с API отдыха колбы, используя docker и docker-compose.

Приложение должно иметь возможность получать выходные данные JSON от API через сеть, созданную docker-compose с помощью функции jQuery getJSON().

После решения проблемы, решающей внутреннюю проблемуdocker-compose hostname контейнера api, все работает в локальной производственной среде.

Однако, когда я перемещаю все в производственную среду (внешнее облако), вызов API перестает работать.

Глядя на инспектора, запрос API запускается, но через некоторое время я получаю сообщение об ошибке:

Не удалось загрузить ресурс: не удалось подключиться к серверу.

Использование docker exec для выполнения curl GET внутри контейнера все еще работает ... Я действительно понятия не имею, где запрос может быть заблокирован в этот момент.

Я благодарен за любые идеи о том, что может пойти не так, или за советы по их устранению!Я должен признать, что я довольно плохо знаком с веб-фреймворками, JavaScript и т. Д.

Вот мой пример настройки / работы:

docker-compose

version: '3'

services:
  s2-api:
    build: ./api
    container_name: s2-api
    volumes:
      - ./api:/usr/src/app
    expose: 
      - 5001
    command: python api.py

  app:
    container_name: app
    build: ./app
    volumes:
      - ./server:/usr/src/app
    ports:
      - 2222:5000
    depends_on:
      - s2-api
    command: python app.py

app.py

from flask import Flask, request, url_for, render_template, flash, redirect, session, abort
from flask_cors import CORS
import os
import sys

app = Flask(__name__)
CORS(app)
app.config.from_object(__name__)


@app.route('/')
def index():
    return render_template('test.html')

if __name__ == '__main__':

    app.run(host='0.0.0.0',port=5000,debug=True)

api.py

from flask import Flask, request, url_for, jsonify
from flask_restful import Resource, Api
from flask_cors import CORS

app = Flask(__name__)
CORS(app)
api = Api(app)

class Test(Resource):
    def get(self):

        return jsonify({'Result':42})

api.add_resource(Test,'/query')

if __name__ == '__main__':
    app.run(host='0.0.0.0',port=5001,debug=True)

test.html

<code><html>
    <head>
        <meta charset='utf-8' />
        <title>Test</title>
        <script type="text/javascript" src="https://code.jquery.com/jquery-2.1.4.min.js"></script>
        <style>
            body { margin:0; padding:0; }
        </style>
    </head>
    <body>

    <h1>TEST</h1>

    <pre id="json">
// URL, полученный с помощью Docker, проверяет let url = `http://172.20.0.2:5001/query?` $ .getJSON (url, {параметрA: 10, параметрB: 20}). Done (function (d) {document.getElementById ("json"). InnerHTML = JSON.stringify (d, undefined, 2);});
...