RESTful API的docker-compose getJSON被阻止

时间:2019-02-17 18:44:28

标签: jquery docker flask docker-compose flask-restful

我正在使用docker和docker-compose运行flask应用程序以及flask restful API。

该应用程序应该能够通过docker-compose使用jQuery getJSON()函数创建的网络从API获取JSON输出。

解决了api容器的内部docker-compose主机名后,一切都在本地生产环境中运行。

但是,当我将所有内容移至生产环境(外部云)时,API调用将停止工作。

看着检查器,API查询被触发,但是一段时间后,我收到错误消息:

  

无法加载资源:无法连接到服务器。

使用docker exec在容器内执行curl GET仍然可行……我真的不知道此时查询可能在哪里被阻塞。

我感谢任何可能出问题的想法,或任何如何调试它的指针!我必须承认我对Web框架,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

<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"></pre>

    </body>

    <script>

        // url retrieved with docker inspect
        let url = `http://172.20.0.2:5001/query?`

        $.getJSON(url, {
          parameterA:10,
          parameterB:20
        }).done(function(d){

        document.getElementById("json").innerHTML = JSON.stringify(d, undefined, 2);

        });

    </script>
</html>

0 个答案:

没有答案