我在dockers
上使用官方redis
图像和sidkiq
。
以下是redis图像的yml配置:
redis:
build: .
dockerfile: Dockerfile-redis
ports:
- '6379:6379'
volumes:
- 'redis:/var/lib/redis'
sidekiq:
build: .
command: bundle exec sidekiq
links:
- db
- redis
volumes:
- .:/app
env_file:
- .env
以下是我的Dockerfile-redis
的代码:
FROM redis
COPY redis.conf /usr/local/etc/redis/redis.conf
CMD [ "redis-server", "/usr/local/etc/redis/redis.conf" ]
当我构建图像时,一切正常,但过了一段时间后,docker compose logs会显示以下权限错误:
redis_1 | 98:C 22 Jan 2019 18:40:10.098 # Failed opening the RDB file dump.rdb (in server root dir /var/lib/redis) for saving: Permission denied
redis_1 | 1:M 22 Jan 2019 18:40:10.203 # Background saving error
我已经尝试了很多解决方案,但我仍然在日志中遇到这个错误。每次拒绝redis打开转储的权限。rdb文件。我也遵循了这个解决方案,并在我的Dockerfile redis中做了如下更改,以向根目录授予对redis的权限
USER root
CMD chown -R root:root /var/lib/redis/
CMD chown 777 /var/lib/redis/
CMD chown 777 /var/lib/redis/dump.rdb
我已经为dir
尝试了755
,为dbfilename
尝试了644
,但它对我不起作用。我还尝试了使用redis
用户的Dockerfile-redis
的上述配置,但我仍然在打开dump.rdb
文件时收到相同的权限被拒绝
错误。
我不知道我在这里做错了什么。请帮我做这个
从根目录启动docker容器,例如:
redis:
build: .
dockerfile: Dockerfile-redis
user: root <-- REQUIRE
ports:
- '6379:6379'
volumes:
- 'redis:/var/lib/redis'
官方redis映像似乎使用应用用户来运行redis-server,而不是root(这是一种安全最佳实践),无论用户定义如何-我从映像的入口点外壳脚本中提取了这一点:
# allow the container to be started with `--user`
if [ "$1" = 'redis-server' -a "$(id -u)" = '0' ]; then
find . \! -user redis -exec chown redis '{}' +
exec gosu redis "$0" "$@"
fi
将卷装载到容器时,它由根用户所有,它将覆盖映像层中的默认目录以及以前的权限。
redis镜像的意图似乎不是将“/var/lib/redis”目录作为卷公开,而是提供装载到“/data/”以实现持久性:
如果启用了持久性,则数据存储在卷/数据中,可以与来自某个卷容器的卷或-v/docker/host/dir:/data一起使用(请参阅docs.docker volumes)。
有关Redis持久性的更多信息,请参阅http://redis.io/topics/persistence.
一小时不活动后,Redis将尝试将内存db转储到磁盘。
Redis从官方的Redis图像中尝试编写。rdb文件位于containers/data
文件夹中,这很不幸,因为它是一个root所有的文件夹,也是一个非持久性位置(如果容器/pod崩溃,写入其中的数据将消失)。
因此,在一个小时的不活动之后,如果您以非root用户身份运行了
redis
容器(例如docker run-u 1007
而不是默认的docker run-u 0
),您将在日志中收到一个非常详细的错误msg(请参阅docker logs redis
):
1:M 29 Jun 2019 21:11:22.014 * 1 changes in 3600 seconds. Saving...
1:M 29 Jun 2019 21:11:22.015 * Background saving started by pid 499
499:C 29 Jun 2019 21:11:22.015 # Failed opening the RDB file dump.rdb (in server root dir /data) for saving: Permission denied
1:M 29 Jun 2019 21:11:22.115 # Background saving error
文件夹映射到一个外部位置(非根用户,这里是1007,具有写访问权限),例如:因此,您需要做的是将容器的
/数据
docker run --rm -d --name redis -p 6379:6379 -u 1007 -v /tmp:/data redis
问题内容: 我在ubuntu 12.04上使用ubuntu apt-get安装了Redis服务器2.8。 我已经从其他数据库复制了dump.rdb。现在,当我尝试启动新服务器时,我不断得到: 我该如何解决? 问题答案: 您应该检查 redis.conf* 文件以查看 dir 和 dbfilename中 的权限。如果位于 dir 路径指定的路径中的 dbfilename 中命名的文件存在,并且权限也
我该怎么解决这个?
我使用的是redis版本3.0.6。redis-server进程正在由redis用户运行。 突然从24小时后的5天开始,redis开始失败“打开. rdb进行保存”在此之前它工作正常。 正如您在下面的日志片段中所看到的,Redis表现正常,然后开始失败。服务器重启后解决了问题。 那么,我的问题是:这怎么会发生?请给我一个合适的解决方案。
我在Debian服务器8.5上运行Redis服务器2.8.17。我使用Redis作为Django 1.8.4应用程序的会话存储。 我已经有几个月没有更改服务器上的软件配置了,一切正常,直到一周前Django开始出现以下错误: 我查看了redis日志,发现这种情况大约每秒发生一次: 我已经读了这两个SO问题1,2,但是他们没有帮助我找到问题。 ps显示用户“redis”正在运行服务器: 我检查了配置
我在Debian Server8.5上运行Redis Server2.8.17。我使用Redis作为Django1.8.4应用程序的会话存储。 我读过这两个问题1,2,但它们没有帮助我找到问题。 ps显示用户“Redis”正在运行服务器: 我检查了配置文件中的redis文件名和路径: 但是当我检查输出时,我没有看到任何错误。特别是,我没有看到“权限被拒绝”错误,正如我所期望的那样。 另外,/var
我无法使用ssh密钥访问我的repo。当我尝试将git推送到gitlab上的代表时,它会询问密码短语。 我从头开始的步骤。我要到~/. ssh/和此文件夹中的所有文件。然后: > 创建ssh密钥mymail@gmail.com“-b 4096 然后在~/. ssh/