我试图在redis中保存python应用程序的数据,但是当我停止docker compose文件时,数据将被删除,当我再次运行docker compose文件时,它将从头开始。我想保存容器的数据,无论何时启动,它都从容器退出时离开的位置开始。例如,当我退出容器时,它显示 Hello World! I have been seen b'6' times.
当我重新启动容器时,它应该从 Hello World! I have been seen b'6' times.
```
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)
2条答案
按热度按时间mwngjboj1#
如果您阅读有关“卷”的文档,您会发现:
https://kubernetes.io/docs/concepts/storage/volumes/
另一方面,kubernetes卷有一个显式的生存期——与包围它的pod相同。因此,一个卷比在pod中运行的任何容器都长,并且数据在容器重新启动时被保留。当然,当一个豆荚不复存在时,体积也将不复存在。也许比这更重要的是,kubernetes支持多种类型的卷,一个pod可以同时使用任意数量的卷。
https://kubernetes.io/docs/concepts/storage/persistent-volumes/
简而言之,您需要更改为持久卷。
lp0sw83n2#
您需要向redis服务添加一个卷。
我记得,redis图像的内部路径是
/data
. 把这个卷装到你的docker里。别忘了加上
--appendonly yes
你的redis命令。