我正在尝试使用docker-compose在调试模式下运行一个简单的烧瓶应用程序。我创建了我的Dockerfile,如下所示:
CREATE OR REPLACE PROCEDURE MY_ROLE_GRANTING_PROCEDURE
IS
BEGIN
EXECUTE IMMEDIATE 'grant some_role to rjones';
END;
我的docker-compose文件如下所示:
FROM jazzdd/alpine-flask
EXPOSE 80
我的docker.env只有postgres数据库的密码。我创建了一个简单的python文件,如下所示:
version: '2'
networks:
test_network:
driver: bridge
services:
db:
networks:
- test_network
image: postgres:9.5.3
env_file:
- docker.env
expose:
- 5432
app:
networks:
- test_network
build: .
env_file:
- docker.env
expose:
- 80
ports:
- 80:80
volumes:
- ./app/:/app
command: -d
现在运行应用程序,我正在使用 from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello_world():
return "Hello, World"
if __name__ == '__main__':
app.run(debug=True,host='0.0.0.0')
命令。我认为应用程序在服务器上启动后,当我对app.py文件进行任何更改时,它将反映在网页上,而不必重新启动容器。我没有看到预期的行为。我尝试设置我的本地env变量docker-compose up -d --build
,但不确定这是否有帮助。我错过了什么吗?
我还引用了this页面,但没有看到任何有用的内容。
答案 0 :(得分:2)
示例(简化)runthru演示文件编辑,无需重新启动容器重新启动,供您参考。
<强> app.py 强>
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello_world():
return "Hello, World"
if __name__ == '__main__':
app.run(debug=True,host='0.0.0.0',port=80)
您需要指定烧瓶开发服务器的端口,以便与暴露的容器端口80匹配。
屏幕截图中的步骤摘要(MAC OS X):
答案 1 :(得分:0)
在我的情况下,我与gevent发生冲突。这是解决方法:
import os
if not (os.environ.get('FLASK_DEBUG') == 1):
from gevent import monkey
monkey.patch_all()