php做网站首页wordpress文章列表模板
解决:docker创建Redis容器成功,但无法启动Redis容器、也无报错提示
- 一·问题描述:
 - 1.docker若是直接简单使用run命令,但不挂载容器数据卷等参数,则可以启动Redis容器
 - 2.docker复杂使用run命令,使用指定redis.conf文件后台启动Redis服务、且挂载容器数据卷时,容器创建成功,但是永远无法启动Redis容器
 
- 二·问题原因:
 - 1.docker容器里面,如果进程都是守护进程,则容器会自动关闭,并且没有报错
 - 2.Redis容器使用的redis.conf配置文件中`daemonize`是`yes`,表示Redis服务进程成为守护进程
 - 3.使用的docker run命令中带有-d参数,表示直接后台启动Redis服务
 - 4.宿主机跟Redis容器数据卷挂载映射的目录,都需要拥有可读可写操作权限
 - 5. 综上所述:因此Redis容器里面启动时,容器中全是守护进程,所以容器会瞬间关闭,永远启动不起来
 
- 三·解决方案:
 - 前提:先对宿主机的挂载映射目录,进行授权操作,两个方案都需要使用
 - 解决方案一(推荐使用):该方案下Redis容器实例重启时,Redis服务也会自动启动。使用-d参数后台启动Redis服务,需要修改redis.conf配置文件
 - 解决方案二(了解拓展):该方案下Redis容器实例重启时,Redis服务不会自动启动,还是需要进去手动启动Redis服务。使用前端交互式命令,进行手动启动Redis服务
 
一·问题描述:
1.docker若是直接简单使用run命令,但不挂载容器数据卷等参数,则可以启动Redis容器

2.docker复杂使用run命令,使用指定redis.conf文件后台启动Redis服务、且挂载容器数据卷时,容器创建成功,但是永远无法启动Redis容器

二·问题原因:
1.docker容器里面,如果进程都是守护进程,则容器会自动关闭,并且没有报错
2.Redis容器使用的redis.conf配置文件中daemonize是yes,表示Redis服务进程成为守护进程
 
3.使用的docker run命令中带有-d参数,表示直接后台启动Redis服务
4.宿主机跟Redis容器数据卷挂载映射的目录,都需要拥有可读可写操作权限
5. 综上所述:因此Redis容器里面启动时,容器中全是守护进程,所以容器会瞬间关闭,永远启动不起来
三·解决方案:
前提:先对宿主机的挂载映射目录,进行授权操作,两个方案都需要使用
chmod 777 /宿主机目录
 
解决方案一(推荐使用):该方案下Redis容器实例重启时,Redis服务也会自动启动。使用-d参数后台启动Redis服务,需要修改redis.conf配置文件
- 1.修改redis.conf配置文件参数
daemonize为no: 
由于创建容器实例时,会进行容器数据卷挂载,因此可以直接在外部宿主机里面修改,docker会自动同步该文件到redis容器对应目录里面
#表示创建Redis服务的进程,是否为守护进程
daemonize no
 

- 2.删除之前创建的redis容器实例
 
docker rm -f 容器id
 

- 3.复杂使用run命令,再次重新创建redis容器实例。会进行容器数据卷挂载,指定redis.conf配置文件启动,使用-d参数后台启动redis服务(创建其他容器实例,命令格式也差不多这样)
 
注意:里面路径参数值,读者应该根据自己的实际情况进行修改
docker run -p 6379:6379  --name myRedis6.0.8  --privileged=true  -v /Applications/redis-6.0.8/config/redis.conf:/etc/redis/redis.conf  -v /Applications/redis-6.0.8/data:/data  -d redis:6.0.8  redis-server /etc/redis/redis.conf
 
- 4.执行并校验Redis服务结果:成功可用!

 - 5.退出容器时,注意使用
ctrl+p+q方式,这样不会关闭容器

 
解决方案二(了解拓展):该方案下Redis容器实例重启时,Redis服务不会自动启动,还是需要进去手动启动Redis服务。使用前端交互式命令,进行手动启动Redis服务
- 1.无需修改配置文件参数
daemonize值,yes或者no都行,这个参数表示创建Redis服务的进程,是否为守护进程;仅仅会导致使用命令redis-server /etc/redis/redis.conf启动服务时,形式不一样罢了;
(1)如果为yes则启动时可以直接后台启动,不用一直保留终端窗口开着;
(2)如果为no当前这种解决方案也可以使用,但是就不推荐了,因为这会需要终端窗口一直保持开着才行,否则就会关闭Redis服务

 - 2.删除之前创建的Redis容器实例:
 
docker rm -f 容器id
 
- 3.复杂使用run命令创建redis容器实例,且进行容器数据卷挂载,且使用交互式进入容器里面,该方式并不会启动Redis服务进程,需要到容器里面进行手动启动Redis服务(创建其他容器实例,命令格式也差不多这样)
 
注意:里面路径参数值,读者应该根据自己的实际情况进行修改
docker run -p 6379:6379  --name myRedis6.0.8  --privileged=true  -v /Applications/redis-6.0.8/config/redis.conf:/etc/redis/redis.conf  -v /Applications/redis-6.0.8/data:/data  -it redis:6.0.8  /bin/bash
 

- 4.在容器里面手动启动Redis服务,并且验证Redis服务是否可用:成功可用!
 
#使用指定配置文件启动Redis服务
redis-server /etc/redis/redis.conf
 

- 5.退出容器验证结果:成功可用

 
