Python 保存Docker容器数据

Python 保存Docker容器数据,python,docker,redis,docker-compose,dockerfile,Python,Docker,Redis,Docker Compose,Dockerfile,我试图在redis中保存python应用程序的数据,但当我停止docker compose文件时,数据将被删除,当我再次运行docker compose文件时,它将从头开始。我想保存容器的数据,无论何时启动,它都从容器退出时离开的位置开始。例如,当我退出容器时,它会显示helloworld!我已经看过6次了。当我重新启动容器时,它应该从Hello World开始!我已经见过6次了。 version: "3.7" services: nginx_app: imag

我试图在redis中保存python应用程序的数据,但当我停止docker compose文件时,数据将被删除,当我再次运行docker compose文件时,它将从头开始。我想保存容器的数据,无论何时启动,它都从容器退出时离开的位置开始。例如,当我退出容器时,它会显示
helloworld!我已经看过6次了。
当我重新启动容器时,它应该从
Hello World开始!我已经见过6次了。

version: "3.7"

services:
  nginx_app:
    image: nginx:latest
    depends_on:
      - flask_app
    volumes:
      - ./default.conf:/etc/nginx/conf.d/default.conf
    ports:
      - 8082:80
    networks:
      - my_project_network

  flask_app:
    build:
      context: .
      dockerfile: Dockerfile
    expose:
      - 5000
    depends_on:
      - redis_app
    networks:
      - my_project_network

  redis_app:
    image: redis:latest
    command: redis-server --requirepass 1234
    volumes:
      - ./redis-vol:/data
    expose:
      - 6379
    networks:
      - my_project_network

networks:
  my_project_network:
    external: true
python文件:

from flask import Flask
from redis import Redis
app = Flask(__name__)
redis = Redis(host='redis_app', port=6379, password='123a')
@app.route('/')
def hello():
    redis.incr('hits')
    return 'Hello World! I have been seen %s times.' % redis.get('hits')
if __name__ == "__main__":
    app.run(host="0.0.0.0", debug=True)

您需要向redis服务添加一个卷

我记得,这个redis图像的内部路径是
/data
。只需在docker compose中装入此卷


不要忘了向redis命令中添加
——只添加yes

您需要向redis服务添加一个卷

我记得,这个redis图像的内部路径是
/data
。只需在docker compose中装入此卷


不要忘记将
--appendonly yes
添加到redis命令中。

如果您阅读了有关“卷”的文档,您将发现:

另一方面,Kubernetes卷有一个明确的生存期-与包围它的Pod相同。因此,一个卷比Pod中运行的任何容器都要长,并且在容器重新启动时会保留数据。当然,当Pod不存在时,卷也将不存在。也许更重要的是,Kubernetes支持多种类型的卷,Pod可以同时使用任意数量的卷


简而言之,您需要更改为永久卷。

如果您阅读有关“卷”的文档,您将发现:

另一方面,Kubernetes卷有一个明确的生存期-与包围它的Pod相同。因此,一个卷比Pod中运行的任何容器都要长,并且在容器重新启动时会保留数据。当然,当Pod不存在时,卷也将不存在。也许更重要的是,Kubernetes支持多种类型的卷,Pod可以同时使用任意数量的卷


简而言之,您需要更改为永久卷。

您需要了解->我们可以使用数据卷吗?您需要了解->我们可以使用数据卷吗?您可以验证内部路径吗?或者提供一个我可以添加到redis的卷行?阅读标题为“从持久性存储开始”的段落
volumes:-./redis vol:/data
我已经添加了这一行,但仍然无法保存数据。我已经更新了问题,并在问题中添加了这一行,您的redis vol的内容是什么?第一次运行后,它应该包含redis数据库文件。是:),并且您应该会在
/redis vol
中看到该文件。您可以验证内部路径吗?或者提供一个我可以添加到redis的卷行?阅读标题为“从持久性存储开始”的段落
volumes:-./redis vol:/data
我已经添加了这一行,但仍然无法保存数据。我已经更新了问题,并在问题中添加了这一行,您的redis vol的内容是什么?第一次运行后,它应该包含redis数据库文件。是:)并且您应该会在
/redis vol
中看到该文件。我以前没有与Kurbenetes合作过,尝试使用docker compose volumes进行此操作,但我认为我没有正确给出redis的路径-1:询问者没有询问Kurbenetes,引入kubernetes来解决一个可以用普通Docker卷解决的问题是一个不必要的复杂问题。我以前没有与kubernetes合作过,尝试用Docker compose卷来解决这个问题,但我认为我没有正确地给出redis的路径-1:询问者没有询问kubernetes,引入kubernetes来解决一个可以用正常Docker卷解决的问题是一个不必要的复杂问题。