对烧瓶代码所做的更改未反映在 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:
这个配置有两个问题。我不确定是否可以在这个问题中同时询问这两个问题。 (如果不能这样问,诚挚的歉意)
- 当我使用
docker-compose up --build
代码的实时更新不会在容器中发生。
- 在构建过程中创建了两个图像。我希望只有一张图片,但我不明白如何像下面这样创建两张图片。这是由于配置错误造成的吗?
正如@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
在烧瓶代码中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:
这个配置有两个问题。我不确定是否可以在这个问题中同时询问这两个问题。 (如果不能这样问,诚挚的歉意)
- 当我使用
docker-compose up --build
代码的实时更新不会在容器中发生。 - 在构建过程中创建了两个图像。我希望只有一张图片,但我不明白如何像下面这样创建两张图片。这是由于配置错误造成的吗?
正如@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