Redis数据被Docker入口点覆盖

Redis数据被Docker入口点覆盖,docker,docker-compose,Docker,Docker Compose,我需要一个redis容器,从我的应用程序将使用的一些预定义配置开始 我通过在读取docker文件时添加数据(使用CMD)找到了一个解决方案 Docker文件:- FROM redis:latest COPY my-data.redis /my-dir/ COPY my-redis.sh /my-dir/ CMD ["sh", "/my-dir/my-redis.sh"] my-redis.sh:- redis-server --daemonize yes && sleep 1

我需要一个redis容器,从我的应用程序将使用的一些预定义配置开始

我通过在读取docker文件时添加数据(使用CMD)找到了一个解决方案

Docker文件:-

FROM redis:latest
COPY my-data.redis /my-dir/
COPY my-redis.sh /my-dir/
CMD ["sh", "/my-dir/my-redis.sh"]
my-redis.sh:-

redis-server --daemonize yes && sleep 1 
redis-cli < /my-dir/my-data.redis 
redis-cli save 
redis-cli shutdown 
redis-server 
docker compose:-

redis:
    image: my-redis:latest
    networks:
      - back-tier
    deploy:
      replicas: 1
      update_config:
        parallelism: 1
        delay: 10s
      restart_policy:
        condition: on-failure
    #command: redis-server --appendonly yes
    ports:
    - 6379:6379
    volumes:
    - ./data/redis-data:/data
    restart: always
我的预定义数据正在填充到redis容器中,但当我修改数据时,它将在容器重新启动时被覆盖

PS:-我已将redis数据映射到外部,但在重新启动时,它正在被修改


任何帮助都将不胜感激。

如果您不想在每次容器启动时重新初始化Redis,那么您需要在启动脚本中包含逻辑以防止这种行为。简单到:

if ! [ -f /etc/redis-was-configured ]; then
  redis-server --daemonize yes && sleep 1 
  redis-cli < /my-dir/my-data.redis 
  redis-cli save 
  redis-cli shutdown 
  touch /etc/redis-was-configured
fi

redis-server
if![-f/etc/redis已配置];然后
redis服务器--daemonize yes&&sleep 1
redis cli
这将在配置Redis后创建一个标志文件,如果容器启动时该文件存在,则会导致它跳过初始数据加载

您可以运行Redis查询来检查预期的数据是否可用,而不是依赖于标志文件,但一般来说,我在这里介绍的内容就足够了(这是解决此类问题的一个相当常见的解决方案)

if ! [ -f /etc/redis-was-configured ]; then
  redis-server --daemonize yes && sleep 1 
  redis-cli < /my-dir/my-data.redis 
  redis-cli save 
  redis-cli shutdown 
  touch /etc/redis-was-configured
fi

redis-server