Docker 烧瓶在码头上运行。每次都需要重建

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 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 /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世界的运行非常接近。)