记录使用 docker-compose 部署 redis 服务,配置文件不生效问题

文章讲述了作者在迁移阿里云服务器上的DockerRedis时遇到的配置文件不生效问题,涉及docker环境配置、docker-compose文件编写、redis.conf配置,以及如何通过本地调试验证配置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Author: Gorit
Date:2023年11月4日

阅读本文基础:

  1. 熟悉 Linux 基础命令
  2. 会 docker 常见命令,了解 docker-compose
  3. 了解 redis

一、问题背景

由于阿里云服务器今天到期了, 但是上面用 docker 部署的 redis 也即将到期所 以需要迁
移到另一台服务器上,

:::info
但是在自己配置的过程中,发现网上的其它教程基本都没有解决一个共性问题 —— 配置文件不生效的问题,所以做一个记录
:::

二、docker 环境配置

因此我重新在新服务器上搭建了 docker 服务, 同时记得配置国内的 docker 镜像, 不然 docker 的服务器在国外, 会导致镜像下载很慢,可以参考下阿里云的 容器镜像服务 怎么配置

当 docker 环境搭建好后,我们还需要单独安装 docker-compose 功能,具体步骤如下

# 下载 (PS: 我这个版本可能比较老,需要更新内容)
sudo curl -L "https://github.com/docker/compose/releases/download/1.27.4/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

# 设置执行权限
sudo chmod +x /usr/local/bin/docker-compose

三、编写 docker-compose 文件

网上有很多案例,我这边挑出我这边觉得比较好的一个版本

version: '3.3'
services:
  redis:
    image: redis:latest
    container_name: redis
    restart: always
    ports:
      - 6379:6379
    volumes:
      - ./config/redis.conf:/usr/local/etc/redis/redis.conf:rw
      - ./data:/data:rw
      - ./logs:/var/log/redis
    command:
      /bin/bash -c "redis-server /usr/local/etc/redis/redis.conf "

从 compose 文件中,我们可以看到挂载了三个目录,分别是

  • config
  • data
  • logs

这里要注意,第一个 config 目录,我们需要先自己创建好,然后待会把后面创建的 redis.conf 文件放进去。很重要!!!

后面的文件就不用管了,使用 docker-compose 创建 docker 容器后, data 目录,logs 目录 都会被自动创建

这里有一个坑,使用 docker 挂载 volumes 时,即是我们写的是一个文件格式,最终都会被 docker 创建成目录,这就是导致 配置文件失效的根因

四、redis.conf 配置文件编写

这里有官方文档可以及参考:https://redis.io/docs/management/config-file/

用 配置文件的主要目的,是配置 redis 密码,不然的话,任何人都可以使用我们的 redis 服务,那样的话也太不安全了

网上也有很多,copy 一份就行,不用自己一行一行去写,下面是我用到的配置文件内容

 # 设置Redis是否以守护进程方式运行,no,否则容器启动后会停掉
daemonize no
 # 设置Redis日志级别
loglevel warning
 # 设置Redis的数据持久化方式
save 900 1
save 300 10
save 60 10000
 # 设置Redis的数据存储路径
dir /data
 # 设置Redis的密码认证
requirepass xxxx
 # 设置Redis的监听地址和端口号
#bind 127.0.0.1
port 6379
 # 设置Redis的最大连接数
maxclients 10000
 # 设置Redis的超时时间
timeout 0
 # 设置Redis的优化参数
tcp-backlog 128
tcp-keepalive 0
databases 16

五、运行容器

docker-compose up -d

# 其她,命令

docker-compose up -d # 启动

docker-compose down # 停止

docker-compose stop # 暴力停止

如果你是第一次运行,docker 会先去下载 redis 的镜像,然后创建容器,出现如下情况,则说明运行成功了!

image.png

PS:如果是 docker 容器创建好后,再手动修改,config/redis.conf/ ,重启 docker 容器会出现如下错误

image.png

六、本地调试

打开 redis 连接 客户端,如果连接要求你输入密码,则说明,配置文件生效了,如下图

image.png

网上还有许多其他的验证方式,比如进入 docker 容器内验证,或者 服务器上安装 docker 客户端,去验证配置文件是否生效等等

### 使用 Docker Compose 部署 Redis 哨兵集群 #### 准备工作 为了成功部署 Redis 哨兵集群,需先安装 DockerDocker Compose 工具[^1]。 #### 创建 `docker-compose.yml` 文件 编写一个用于启动 Redis 主从服务器及其对应的哨兵实例的 `docker-compose.yml` 文件: ```yaml version: '3' services: redis-master: image: bitnami/redis:latest ports: - "6379:6379" environment: - ALLOW_EMPTY_PASSWORD=yes - REDIS_REPLICATION_MODE=master redis-slave: image: bitnami/redis:latest depends_on: - redis-master environment: - ALLOW_EMPTY_PASSWORD=yes - REDIS_MASTER_HOST=redis-master - REDIS_REPLICATION_MODE=slave sentinel: image: bitnami/redis-sentinel:latest depends_on: - redis-master - redis-slave ports: - "26379:26379" command: ["sentinel", "run", "/opt/bitnami/conf/sentinel.conf"] volumes: - ./sentinel.conf:/opt/bitnami/conf/sentinel.conf ``` 此配置定义了一个主节点 (`redis-master`)、一个从节点 (`redis-slave`) 及其监视者 (即哨兵服务)[^2]。 #### 编写 Sentinel 配置文件 创建名为 `sentinel.conf` 的文件来指定哨兵的行为规则。下面是一个简单的例子: ```conf port 26379 dir /tmp/ sentinel monitor mymaster localhost 6379 2 sentinel down-after-milliseconds mymaster 5000 sentinel failover-timeout mymaster 60000 sentinel parallel-syncs mymaster 1 ``` 上述设置指定了要监控的主库名称为 `mymaster`, IP 地址为主机地址, 并设定了当两个或更多哨兵同意认为该主库不可达时触发故障转移操作的时间间隔和其他参数[^4]。 #### 启动服务 完成以上两步之后,在命令行工具中进入包含这两个文件所在的目录并执行以下指令以启动所有组件: ```bash docker-compose up -d ``` 这将会以后台守护进程的方式运行所有的容器,并按照依赖关系依次初始化各个服务。 #### 测试连接 一旦全部的服务都已正常启动,则可以通过客户端尝试访问 Redis 实例验证是否能够正常使用以及哨兵功能是否生效。对于哨兵来说,默认监听端口是 26379;而对于普通的 Redis 数据库则是 6379 端口[^5]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值