【问题标题】:Save Docker container data保存 Docker 容器数据
【发布时间】:2020-11-07 10:43:42
【问题描述】:

我正在尝试将 python 应用程序的数据保存在 redis 中,但是当我停止 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)

【问题讨论】:

标签: python docker redis docker-compose dockerfile


【解决方案1】:

你需要为你的 redis 服务添加一个卷。

我记得,这个redis镜像的内部路径是/data。只需将此卷安装在您的 docker-compose 中即可。

不要忘记在你的 redis 命令中添加--appendonly yes

【讨论】:

  • 您能验证一下内部路径吗?或者提供我可以添加到redis的音量线?
  • 阅读标题为start with persistent storage的段落hub.docker.com/_/redis
  • volumes: - ./redis-vol:/data 我已经添加了这一行但仍然无法保存数据。我已更新问题并将这一行添加到问题中
  • 你的 redis-vol 的内容是什么?它应该包含第一次运行后的 redis 数据库文件。
  • 是的 :) 你应该会看到文件出现在./redis-vol
【解决方案2】:

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

https://kubernetes.io/docs/concepts/storage/volumes/

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

https://kubernetes.io/docs/concepts/storage/persistent-volumes/

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

【讨论】:

  • 我之前没有使用过 kurbernetes,试图用 docker-compose 卷来做,但我认为我没有给出 redis 的路径
  • -1:提问者不是在询问 Kubernetes,引入 Kubernetes 来解决可以通过普通 Docker 卷解决的问题是不必要的复杂化。
猜你喜欢
  • 1970-01-01
  • 2020-04-22
  • 1970-01-01
  • 1970-01-01
  • 2015-02-18
  • 2017-09-06
  • 1970-01-01
  • 1970-01-01
  • 2017-03-22
相关资源
最近更新 更多