对烧瓶代码所做的更改未反映在 Docker 容器和多图像创建中

Changes made to the flask code not reflecting in the Docker container and Multiple Image creation

在烧瓶代码中main.py我使用的是下面的脚本

if __name__ == "__main__":
    app.run(host="0.0.0.0", debug=True, port=80)

docker文件设置环境,看起来像

Dockerfile

FROM python:3.8-slim
LABEL maintainer="nebu"
ENV GROUP_ID=1000 \
    USER_ID=1000
RUN apt-get update && apt-get install -y apt-transport-https ca-certificates
WORKDIR /app
ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1
ENV VIRTUAL_ENV=/opt/venv
RUN python3 -m venv $VIRTUAL_ENV
ENV PATH="$VIRTUAL_ENV/bin:$PATH"
RUN ["python", "-m", "pip", "install", "--upgrade", "pip", "wheel"]
RUN apt-get install -y  python3-wheel
COPY ./requirements.txt /app/requirements.txt
RUN ["python", "-m", "pip", "install", "--no-cache-dir", "--upgrade", "-r", "/app/requirements.txt"]
COPY ./app /app

docker-compose.yml 包含定义的卷,内容是

version: '3.8'
services:
  web:
    container_name: "flask_container"
    build: ./
    volumes:
      - ./app:/app
    ports:
      - "8000:8000"
    environment:
      - DEPLOYMENT_TYPE=production
      - FLASK_APP=app/main.py
      - FLASK_DEBUG=1
      - MONGODB_DATABASE=testdb
      - MONGODB_USERNAME=testuser
      - MONGODB_PASSWORD=testuser
      - MONGODB_HOSTNAME=mongo
    command: gunicorn app.main:app --workers 4 --name main -b 0.0.0.0:8000
    depends_on:
      - redis
    links:
      - mongo

  nginx:
    container_name: "nginx_container"
    restart: always
    image: nginx
    volumes:
      - ./app/nginx/conf.d:/etc/nginx/conf.d
    ports:
      - 80:80
      - 443:443
    links:
      - web
      
  redis:
    container_name: "redis_container"
    image: redis:6.2.6
    ports:
      - "6379:6379"

  worker:
    container_name: "celery_container"
    build: ./
    hostname: worker
    command: "celery -A app.routes.celery_tasks.celery worker --loglevel=info"
    volumes:
      - ./app:/app
    links:
      - redis
    depends_on:
      - redis

  mongo:
    container_name: "mongo_container"
    image: mongo:5.0.6-focal
    hostname: mongo
    restart: always
    ports:
      - '27017:27017'
    environment:
      MONGO_INITDB_ROOT_USERNAME: testuser
      MONGO_INITDB_ROOT_PASSWORD: testuser
      MONGO_INITDB_DATABASE: testdb
    volumes:
      - mongo-data:/data/db
      - mongo-configdb:/data/configdb
volumes:
  app:
  mongo-data:
  mongo-configdb:

这个配置有两个问题。我不确定是否可以在这个问题中同时询问这两个问题。 (如果不能这样问,诚挚的歉意)

  1. 当我使用 docker-compose up --build 代码的实时更新不会在容器中发生。
  2. 在构建过程中创建了两个图像。我希望只有一张图片,但我不明白如何像下面这样创建两张图片。这是由于配置错误造成的吗?

正如@Klaus D 建议重新加载 gunicorn 将解决问题 1。因此 docker-compose.yml 中的命令变为

command: gunicorn app.main:app --workers 4 --name main --reload -b 0.0.0.0:8000 

非常感谢@Klaus D