Docker中启用reids

本文详细指导了如何在Docker中配置并启动Redis服务,包括创建必要的配置文件、运行容器、权限设置及测试连接。通过实例演示了如何在控制器中集成Redis进行数据操作和验证。

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

Docker中启用reids

提示:linux下安装docker可以看之前的文章或者参考其他博客

linux下安装docker


提示:网上有很多相关的博客,这里做个简单的记录


步骤:


提示:以下是本篇文章正文内容,下面案例可供参考

1、在本地某个位置创建以下内容

# 以/docker/redis为例
mkdir -p /docker/redis
mkdir -p /docker/redis/data
touch /docker/redis/redis.conf
touch /docker/redis/redis.bash

2、编辑配置文件vim /docker/redis/redis.conf

# Redis配置文件

# Redis默认不是以守护进程的方式运行,可以通过该配置项修改,使用yes启用守护进程
daemonize no

# 指定Redis监听端口,默认端口为6379
port 6379

# 绑定的主机地址,不要绑定容器的本地127.0.0.1地址,因为这样就无法在容器外部访问
bind 0.0.0.0

#需要密码则打开
requirepass 0122

# 持久化
appendonly yes

3、编辑/docker/redis/redis.bash

docker run -p 6379:6379 --name redis -v /docker/redis/redis.conf:/etc/redis/redis.conf -v /docker/redis/data:/data -d redis redis-server /etc/redis/redis.conf 

解释以上命令

docker run redis # 从redis镜像运行容器
-p 6379:6379 # 映射本地6379端口到容器6379端口,前为本地端口
--name redis # 设置容器名称为redis,方便以后使用docker ps进行管理
-v /docker/redis/redis.conf:/etc/redis/redis.conf # 关联本地/docker/redis/redis.conf文件到容器中/etc/redis/redis.conf,同样,前为本地
-v /docker/redis/data:/data # 关联本地/docker/redis/data到容器内/data目录,此为存放redis数据的目录,为方便以后升级redis,而数据可以留存
-d # 后台启动,使用此方式启动,则redis.conf中daemonize必须设置为no,否则会无法启动
redis-server /etc/redis/redis.conf # 在容器内启动redis-server的命令,主要是为了加载配置

4、给予执行权限

记得把 密码 改为自己想要设置的密码

sudo chmod 777 /docker/redis/redis.bash

参数说明:

  • –restart=always: 当Docker 重启时,容器会自动启动。
  • –privileged=true:容器内的root拥有真正root权限,否则容器内root只是外部普通用户权限
  • -v /mydata/mysql/log:/var/log/mysql 映射日志文件
  • -v /opt/mysql/data/:/var/lib/mysql 映射数据目录
  • -v /mydata/mysql/my.cnf:/etc/mysql/my.cnf 映射配置文件
  • -v /mydata/mysql/conf.d:/etc/mysql/conf.d 映射配置文件
  • -e MYSQL_ROOT_PASSWORD=123456 映射mysql root用户密码
  • -d mysql 以后台方式启动

这里可能会报错,需要加入一些配置,把之前创建失败的容器删除,同时把相关目录删除


  • 创建目录
mkdir -p /mydata/mysql
touch /mydata/mysql/my.cnf
  • 在my.cnf中添加以下内容
[mysqld]
user=mysql
character-set-server=utf8
default_authentication_plugin=mysql_native_password
secure_file_priv=/var/lib/mysql
expire_logs_days=7
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
max_connections=1000

[client]
default-character-set=utf8

[mysql]
default-character-set=utf8
  • 重新执行创建容器的命令就可以了

5、启动

# 查看是否已启动
docker ps
# 如果无法启动或者docker ps中无对应内容,将bash中命令复制出来,删除-d参数启动,查看报错信息
# 使用redis-cli或者rdm访问 localhost:6379
# 如需访问容器,可使用
docker exec -it redis bash
redis-cli

注意:

#出现以下错误则是没有输入密码导致
127.0.0.1:6379> set name "hello"  
(error) NOAUTH Authentication required.

#运行以下命令即可
127.0.0.1:6379> auth 0122

在这里插入图片描述

6. 测试

在controller中找一个get风格的方法,添加如下代码

//连接本地的redis
Jedis jedis = new Jedis("192.168.125.131",6379);
//如果有密码则需要下面这一行
jedis.auth("0122");
//查看服务是否运行,运行正常的话返回一个PONG,否则返回一个连接错误
System.out.println(jedis.ping());
/*****************String示例*****************/
//设置字符串数据
jedis.set("word","helloWorld");
//读取字符串数据
System.out.println(jedis.get("word"));
//删除数据
jedis.del("word");

/*****************List示例*****************/
jedis.lpush("list","google");
jedis.lpush("list","aLi");
jedis.rpush("list","Mi");

List<String> stringList = jedis.lrange("list",0l,-1l);
for(String str:stringList){
    System.out.println(str);
}

/*****************Hash示例*****************/
HashMap<String,String> map = new HashMap<>();
map.put("name","tom");
map.put("age","81");
jedis.hmset("man",map);
System.out.println(jedis.hmget("man","name"));
System.out.println(jedis.hgetAll("man"));
System.out.println("获取所有字段:"+jedis.hkeys("man"));
System.out.println("获取字段数量:"+jedis.hlen("man"));
System.out.println("判断age字段是否存在:"+jedis.hexists("man","age"));


jedis.sadd("set1","1");
jedis.sadd("set1","2");
jedis.sadd("set1","1");
jedis.sadd("set2","1");
jedis.sadd("set2","4");
System.out.println("获取集合的成员数"+jedis.scard("set1"));
System.out.println("获取集合中的成员"+jedis.smembers("set2"));
System.out.println("判断集合是否包含指定成员"+jedis.sismember("set1","2"));
System.out.println("获取多个集合的交集"+jedis.sinter("set1","set2"));
System.out.println("获取多个集合并集"+jedis.sunion("set1","set2"));
System.out.println("返回第一个集合与其他集合之间的差异"+jedis.sdiff("set1","set2"));

出现以下类容说明成功!
在这里插入图片描述
也可以使用工具来进行测试,这里使用:RedisDesktopManager

输入linux的ip地址和设置的端口号6379以及自定义的密码后得到如下结果
在这里插入图片描述
到此。部署成功!

总结

提示:docker启用redis步骤大致如上文所示

下一篇:docker实现mysql 主从复制

<think>好的,我需要帮助用户了解如何在Docker中为Redis配置密码认证。根据提供的引用内容,我看到有几种不同的方法,需要整理出清晰的步骤。 首先,引用[1]提到在容器启动后配置密码。这包括进入容器,使用redis-cli设置密码。这可能适用于已经运行的容器,但用户可能需要重启容器后密码是否持久化的问题需要注意。 引用[2]、[3]、[4]则介绍了在启动容器时直接通过命令行参数设置密码的方法,使用--requirepass参数。这种方法看起来更直接,适合在创建容器时就确定密码,避免后续手动配置的麻烦。但用户需要确保命令的正确性,比如是否正确映射端口和容器名称。 引用[5]提到了使用配置文件的方式,通过挂载配置文件到容器中,并在启动时指定该配置文件。这种方法适合需要更多自定义配置的情况,用户可能需要编辑redis.conf文件,设置requirepass字段,并确保容器正确加载配置。 现在需要将这些方法分门别类,给出每种方法的步骤,并比较它们的优缺点。例如,启动时设置密码简单快捷,适合临时测试;而配置文件方式更适合生产环境,配置更持久和可管理。另外,用户可能关心如何为已存在的容器设置密码,这时候需要引用[1]和[4]中的步骤,进入容器内部使用redis-cli命令设置,并注意密码在容器重启后的持久性问题,可能需要保存配置或挂载数据卷。 还需要注意命令中的细节,比如在docker run命令中,--requirepass参数的位置是否正确,是否在镜像名称之后,避免被误解为docker的命令参数。例如,正确的命令应该是docker run --name redis -p 6379:6379 redis --requirepass 123456,其中--requirepass是作为redis服务器的参数传递的。 另外,引用[4]提到修改现有容器的密码,可能需要进入容器执行config set requirepass命令,并使用auth认证,这可能涉及到权限问题,比如是否需要以特权模式运行容器,或者是否配置了正确的卷来保存配置变更。 最后,需要提醒用户关于安全性的最佳实践,比如使用复杂密码、定期更换密码、结合Docker的安全配置等,如引用[5]中提到的使用--privileged和挂载配置文件的例子,确保Redis服务的安全运行。 总结步骤时,应该分点说明三种方法:启动时设置密码、通过配置文件设置、以及为已有容器设置密码。每种方法给出具体命令和注意事项,确保用户能够根据自身情况选择合适的方式。</think>在Docker中为Redis设置密码认证有以下三种常用方法,具体步骤如下: --- ### 方法1:启动容器时直接设置密码 **通过`--requirepass`参数在启动命令中配置密码** ```bash docker run -d --name redis-test -p 6379:6379 redis --requirepass yourPassword ``` - **说明**:`yourPassword`替换为自定义密码,此方法直接启动带密码的Redis容器[^2][^3]。 - **验证**: ```bash docker exec -it redis-test redis-cli auth yourPassword # 认证后执行操作 ``` --- ### 方法2:通过配置文件设置密码 **挂载自定义Redis配置文件并启用密码** 1. 创建配置文件`redis.conf`,添加以下内容: ```conf requirepass yourPassword ``` 2. 启动容器时挂载配置文件: ```bash docker run -d --name redis-test -p 6379:6379 \ -v /path/to/redis.conf:/etc/redis/redis.conf \ redis redis-server /etc/redis/redis.conf ``` - **优点**:适合需要持久化配置的场景,如生产环境[^5]。 --- ### 方法3:为已运行的容器设置密码 **通过`redis-cli`动态修改密码** 1. 进入正在运行的Redis容器: ```bash docker exec -it redis-test /bin/bash ``` 2. 启动Redis客户端并设置密码: ```bash redis-cli config set requirepass yourPassword # 设置新密码 auth yourPassword # 立即认证 ``` - **注意**:此方式密码在容器重启后失效,需结合持久化配置或数据卷[^1][^4]。 --- ### 安全性建议 1. 使用复杂密码(如大小写字母、数字、符号组合)。 2. 生产环境推荐**方法2**(配置文件)或**方法5**(结合数据卷和特权模式)。 3. 避免密码明文暴露在命令行历史中,可通过环境变量管理。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

微风撞见云

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值