• Docker安装Redis,让宿主机可以访问


    一、拉取镜像

     docker pull redis #后面可以带上tag号, 默认拉取最新版本

    二、查看镜像

     docker images   #查看容器中的镜像

    三、启动并做映射(以配置文件方式启动)

    1、创建配置文件目录存放redis.conf,文件从官网下载http://download.redis.io/redis-stable/redis.conf

    2、创建文件夹,新建配置文件贴入从官网下载的配置文件并修改

         1)创建redis.conf文件

        mkdir -p  /usr/local/docker/conf                 #创建文件夹

        vi /usr/local/docker/conf/redis.conf      #创建文件

      2)创建redis保存数据的data文件

        mkdir /usr/local/docker/data  #启动容器时自动创建,可以不自己创建

    3、修改启动默认配置(从上至下依次):

    bind 127.0.0.1 #注释掉这部分,这是限制redis只能本地访问

    protected-mode no #默认yes,开启保护模式,限制为本地访问

    daemonize no  #默认no,改为yes意为以守护进程方式启动,可后台运行,除非kill进程,改为yes会使配置文件方式启动redis失败

    databases 16  #数据库个数(可选)

    dir  ./  #输入本地redis数据库存放文件夹(可选)

    appendonly yes  #redis持久化(可选)

    4、docker启动redis命令

    docker run -p 6379:6379 --name myredis -v /usr/local/docker/conf/redis.conf:/etc/redis/redis.conf -v /usr/local/docker/data:/data -d redis(镜像ID/name) redis-server /etc/redis/redis.conf --appendonly yes

    命令解释说明:

    -p 6379:6379 端口映射:前表示主机部分,:后表示容器部分。

    --name myredis  指定该容器名称,查看和进行操作都比较方便

    -v 挂载目录,规则与端口映射相同。

      为什么需要挂载目录:个人认为docker是个沙箱隔离级别的容器,这个是它的特点及安全机制,不能随便访问外部(主机)资源目录,所以需要这个挂载目录机制。

    -d redis 表示后台启动redis

    redis-server /etc/redis/redis.conf  以配置文件启动redis,加载容器内的conf文件,最终找到的是挂载的目录/usr/local/docker/conf/redis.conf

     --appendonly yes  开启redis 持久化

    5、查看是否运行成功

    docker ps

    6、docker基本命令:

    • 查看所有镜像 docker images
    • 删除镜像(会提示先停止使用中的容器) docker rmi  镜像name/镜像id
    • 查看所有容器 docker ps -a
    • 查看容器运行日志 docker logs 容器名称/容器id
    • 停止容器运行 docker stop 容器name/容器id
    • 终止容器后运行 docker start 容器name/容器id
    • 容器重启 docker restart 容器name/容器id
    • 删除容器 docker rm 容器name/容器id

    四、安装过程中可能会出现的问题

    1、Docker容器做端口映射报错:Error response from daemon: driver failed programming external connectivity on endpoint myredis (1a4bb4e9227ae5f65

    63b016c03c50a2b53174cae6b6ecd9f750b8fd6ce458c8e): (iptables failed: iptables --wait -t nat -A DOCKER -p tcp -d 0/0 --dport 6379 -j DNAT --
    to-destination 172.17.0.2:6379 ! -i docker0: iptables: No chain/target/match by that name.

    解决:docker服务启动时定义的自定义链DOCKER被清除
    重启即可 

    systemctl restart docker

    2、docker容器启动失败,查看日志报错:chown: changing ownership of '.': Permission denied

    # 查看日志
    docker logs -f containerNmae

    解决方法有这么三个:

    • 在docker run中加入 --privileged=true   给容器加上特定权限
    • 关闭selinux
    • 在selinux添加规则,修改挂载目录

    关闭selinux

    [root@localhost ~]# getenforce
    
    Enforcing
    
    [root@localhost ~]# setenforce 0
    
    [root@localhost ~]# getenforce
    
    Permissive

    永久关闭:

    [root@localhost ~]# vi /etc/sysconfig/selinux

    SELINUX=enforcing 改为 SELINUX=disabled

     

     重新启动容器已经正常

    参考:https://www.cnblogs.com/shihuibei/p/10663112.html

    https://blog.csdn.net/weixin_42456466/article/details/87270959

    作者:donleo123
    本文如对您有帮助,还请多推荐下此文,如有错误欢迎指正,相互学习,共同进步。
  • 相关阅读:
    Chrome插件开发,美化网页上的文件列表。chrome-extension,background
    Chrome插件开发,美化网页上的文件列表。chrome-extension,content-scripts
    ASP.NET MVC 常用扩展点:过滤器、模型绑定等
    Windows下Redis缓存服务器的使用 .NET StackExchange.Redis Redis Desktop Manager
    企业号微信支付 公众号支付 H5调起支付API示例代码 JSSDK C# .NET
    分享一个html+js+ashx+easyui+ado.net权限管理系统
    ASP.NET MVC Filters 4种默认过滤器的使用【附示例】
    ASP.NET MVC Controllers and Actions
    玩转控件:Fucking ERP之流程图
    玩转控件:对Dev的GridControl控件扩展
  • 原文地址:https://www.cnblogs.com/donleo123/p/14313869.html
Copyright © 2020-2023  润新知