Docker 烧瓶在码头上运行。每次都需要重建
我试图让我的Flask Docker build能够从为生产运行uWSGI+Nginx切换到为本地开发运行Docker 烧瓶在码头上运行。每次都需要重建,docker,flask,docker-compose,Docker,Flask,Docker Compose,我试图让我的Flask Docker build能够从为生产运行uWSGI+Nginx切换到为本地开发运行Flask run 我已在开发模式下运行Flask: 这是我的Dockerfile: FROM python:3 RUN apt-get -qq update RUN apt-get install -y supervisor nginx RUN pip install uwsgi # Expose dev port EXPOSE 5000 COPY supervisord.conf
Flask run
我已在开发模式下运行Flask:
这是我的Dockerfile:
FROM python:3
RUN apt-get -qq update
RUN apt-get install -y supervisor nginx
RUN pip install uwsgi
# Expose dev port
EXPOSE 5000
COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf
COPY nginx.conf /etc/nginx/sites-enabled/default
RUN echo "daemon off;" >> /etc/nginx/nginx.conf
WORKDIR /usr/src/app
COPY requirements.txt ./
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
RUN pip install --editable .
CMD [ "supervisord" ]
我正在公开端口5000,它是从docker compose.yml运行的:
version: '3'
services:
web:
build: ./
environment:
DATABASE_URL: postgresql://postgres@db/postgres
FLASK_APP: app.main
FLASK_ENV: development
command: flask run --host=0.0.0.0
ports:
- "5000:5000"
links:
- db
volumes:
- .:/app
db:
image: postgres
restart: always
ports:
- 5433:5432
volumes:
- data:/var/lib/postgresql/data
volumes:
data:
driver: local
我可以在http://0.0.0.0:5000/
但是,如果我在视图或模板中更改任何代码,服务器上不会刷新/重新加载任何内容,我将被迫重新构建
我认为,通过在docker compose中指定
FLASK\u ENV:development
,这将启用FLASK服务器的自动重新加载。知道如何调试吗?在主机上调试,在Docker之外。如果需要访问Docker中运行的数据库,可以将环境变量(如MYSQL\u HOST
或PGHOST
设置为指向localhost
)。您根本不需要root权限(任何docker
命令都意味着不受限制的root访问)。IDE不会因为代码在“其他地方”以不同的文件系统布局运行而感到不安。如果您有一个远程调试器,则无需遍历Docker分区即可访问它
一旦在主机上合理运行了它,并且您的py.test
测试通过,然后运行docker build
(在服务器呈现视图的特定情况下,您应该能够通过Flask debug服务器看到几乎完全相同的内容,而无需将nginx代理放在它前面,并且您可以控制通过setup.py
文件中的要求安装的库版本。因此桌面环境将更加简单,并且你应该能够说服自己,它与Docker世界的运行非常接近。)