zoukankan      html  css  js  c++  java
  • 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
    本文如对您有帮助,还请多推荐下此文,如有错误欢迎指正,相互学习,共同进步。
  • 相关阅读:
    48. Rotate Image
    83. Remove Duplicates from Sorted List
    46. Permutations
    HTML5笔记
    18. 4Sum
    24. Swap Nodes in Pairs
    42. Trapping Rain Water
    Python modf() 函数
    Python min() 函数
    Python max() 函数
  • 原文地址:https://www.cnblogs.com/donleo123/p/14313869.html
Copyright © 2011-2022 走看看