我正在使用docker和docker-compose运行flask应用程序以及flask restful API。
该应用程序应该能够通过docker-compose使用jQuery
getJSON()
函数创建的网络从API获取JSON输出。
解决了api容器的内部docker-compose主机名后,一切都在本地生产环境中运行。
但是,当我将所有内容移至生产环境(外部云)时,API调用将停止工作。
看着检查器,API查询被触发,但是一段时间后,我收到错误消息:
无法加载资源:无法连接到服务器。
使用docker exec
在容器内执行curl GET
仍然可行……我真的不知道此时查询可能在哪里被阻塞。
我感谢任何可能出问题的想法,或任何如何调试它的指针!我必须承认我对Web框架,JavaScript等不是很熟悉。
这是我的设置/工作示例:
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
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)
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)
<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>