Redis数据被Docker入口点覆盖
我需要一个redis容器,从我的应用程序将使用的一些预定义配置开始 我通过在读取docker文件时添加数据(使用CMD)找到了一个解决方案 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
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