Я запускаю приложение фляги вместе с 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);});