前言

为了实现“一键部署”的目的,我采用Dockerfile 和 docker-compose来实现自己的目的。这个过程中,我怎么也无法启动自己的redis-server服务。

目录结构

   ~/Workspace/docker/images/redis  tree
.
├── Dockerfile
├── conf
│ └── redis.conf
└── docker-compose.yml

文件内容

Dockerfile
FROM redis:latest
WORKDIR /data/
# 默认的源太慢,原因就是被我大天朝给墙了,所以换成国内,阿里的
RUN sed -i s@/archive.ubuntu.com/@/mirrors.aliyun.com/@g /etc/apt/sources.list RUN apt-get clean # 不能直接 apt-get install curl ,因为容器里面默认apt的包是空的,所以需要更新到本地
RUN apt-get update # docker 是基于Ubuntu的,所以里面基本默认都带有apt-get这个工具
RUN apt-get install -y curl \
&& rm -rf /var/lib/apt/lists/* \
&& mkdir -p /usr/local/etc/redis/ \
&& curl http://download.redis.io/redis-stable/redis.conf > /usr/local/etc/redis/redis.conf CMD [ "redis-server","/usr/local/etc/redis/redis.conf"]
docker-compose.yml
version: "2.2"

services:
redis:
# 使用当前目录下的Dockerfile构建镜像
build: .
image: my_redis
container_name: redis
ports:
- "6379:6379"
volumes:
- ./data:/data
# 此处就是引发血案的地方
# - ./conf:/usr/local/etc/redis

问题分析:

  1. Dockerfile 在构建的过程中,通过curl获取到了redis.conf的配置

  2. docker-compose 在启动容器时,由于 volumes这个地方将本地的目录挂在到了redis容器内部的/usr/local/etc/redis下。那么/usr/local/etc/redis里面的文件就会被全部被本地覆盖。如果本地./conf这个目录下是空的,则/usr/local/etc/redis里面也会是空的。

  3. 解决办法

    1. 本地的./conf文件夹中存在redis.conf,这样的文件
    2. 像上面的案例一样,不要将redis.conf暴露处理。

调试问题的经过

本次调试,着实让我头疼了老一阵,一看死,总是报 can't open file 这种错误。我查看了docker 日志,依然无法找到问题。想进入到docker 容器里面去看,结果发现redis容器根本就没有起来。将Dockerfile 改成如下的形式,才启动了redis容器,并顺利进入到容器里面。才找到原来是redis.conf文件被覆盖掉了。

FROM redis:latest
WORKDIR /data/
RUN sed -i s@/archive.ubuntu.com/@/mirrors.aliyun.com/@g /etc/apt/sources.list
RUN apt-get clean
RUN apt-get update
RUN apt-get install -y curl \
&& rm -rf /var/lib/apt/lists/* \
&& mkdir -p /usr/local/etc/redis/ \
&& curl http://download.redis.io/redis-stable/redis.conf > /usr/local/etc/redis/redis.conf
# CMD [ "redis-server","/usr/local/etc/redis/redis.conf"] # 启动容器,直接让其运行 shell脚本,这样容器就不会推出了。
CMD ["sh","-c","while true;do sleep 1000 ;done"]

docker-compose 基于Dockerfile 安装并启动redis容器的血案的更多相关文章

  1. docker 启动redis容器

    dockerfile FROM registry.cn-hangzhou.aliyuncs.com/xxxholic/redis COPY redis.conf EXPOSE redis.conf p ...

  2. Docker Compose vs. Dockerfile

    Docker Compose vs. Dockerfile - which is better? - Stack Overflowhttps://stackoverflow.com/questions ...

  3. Docker学习笔记_安装和使用Redis

    一.准备 1.宿主机OS:Win10 64位 2.虚拟机OS:Ubuntu18.04 3.操作账号:Docker 二.安装过程 1.搜索Redis                         su ...

  4. Linux系统在线安装、启动 redis

    环境: Linux系统:VMware 14 中 CentOS 7 64 位 redis版本:redis-stable.tar.gz(当前版本是:redis-cli 4.0.9) 一.Linux在线安装 ...

  5. docker18.09.5 安装与启动、容器、镜像

    docker安装与启动 yum -y update 1.卸载老版本的 docker 及其相关依赖yum remove -y docker docker-common container-selinux ...

  6. docker(2)安装centos7镜像与容器管理

    1.镜像加速器 创建/etc/docker/daemon.json { "registry-mirrors": [ "https://registry.docker-cn ...

  7. docker compose线下安装

    Compose 是一个用户定义和运行多个容器的 Docker 应用程序.在 Compose 中你可以使用 YAML 文件来配置你的应用服务.然后,只需要一个简单的命令,就可以创建并启动你配置的所有服务 ...

  8. docker学习笔记(6)——docker场景问题汇总(centos7 由于内核版本低带来的一系列问题,docker彻底卸载,安装、启动日志报错分析)

    参考资料: https://nachuan.blog.csdn.net/article/details/96041277 https://www.cnblogs.com/xzkzzz/p/962765 ...

  9. docker学习笔记:修改无法启动的容器中的内容

    我们可能会碰到这样的一个问题,在容器执行过程中,修改了容器的内容(如配置文件信息),但因为修改出了问题.导致容器关闭后,无法启动. 这事需要重新修改配置文件. 正常情况下可以通过 docker exe ...

随机推荐

  1. JS排序算法--冒泡排序和选择排序

    在我们JS语法当中,数据类型中的复杂数据类型,有一项我们常用的数组数据类型,其中存储的数据有时是乱序的,需要排序,我们有多种方法,最简单的肯定是 :变量.sort(fonction(a,b){a> ...

  2. VS2019 C++动态链接库的创建使用(1) - 创建使用dll

    静态库:函数和数据被编译进一个二进制文件,通常扩展名为.lib,在使用静态库的情况下,在编译链接可执行文件时,链接器从库中复制这些函数和数据并把它们和应用程序的其它模块组合起来创建最终的可执行文件. ...

  3. ComplexBrowser: a tool for identification and quantification of protein complexes in large-scale proteomics datasets(大规模蛋白组学数据集中鉴定和定量蛋白复合物)

    文献名:ComplexBrowser: a tool for identification and quantification of protein complexes in large-scale ...

  4. Idea中使用http请求解决中文乱码问题

    以请求百度为例,使用如下代码即可解决: GET https://www.baidu.com User-Agent: Mozilla/.X MetaSr 1.0

  5. 使用new Image()可以针对单单请求,不要返回数据的情况

    使用new Image()可以针对单单请求,不要返回数据的情况,比如我这里写了一个Demo,请求百度的Logo一个示例: <html> <head> </head> ...

  6. Web_XML

    第1章 XML简介 “当 XML(扩展标记语言)于 1998 年 2 月被引入软件工业界时,它给整个行业带来了一场风暴.有史以来第一次,这个世界拥有了一种用来结构化文档和数据的通用且适应性强的格式,它 ...

  7. 洛谷 P1438 无聊的数列 题解

    原题链接 首先,我们考虑用差分解决问题. 用 \(x_i\) 表示原数列,\(a_i = x_i - x_{i-1}\) 那么,先普及一下差分: 如果我们只需要维护区间加值,单点求值的话,你会发现两个 ...

  8. [模拟]Educational Codeforces Round 2A Extract Numbers

    Extract Numbers time limit per test 2 seconds memory limit per test 256 megabytes input standard inp ...

  9. OpenCV-Python Meanshift和Camshift | 四十七

    学习目标 在本章中, 我们将学习用于跟踪视频中对象的Meanshift和Camshift算法. Meanshift Meanshift背后的直觉很简单,假设你有点的集合.(它可以是像素分布,例如直方图 ...

  10. 面试刷题26:新冠攻击人类?什么攻击java平台?

    可恶的新冠病毒攻击人类,搞得IT就业形势相当不好?好在有钟南山院士带领我们提前开展好了防护工作! java作为基础平台安装在各种移动设备,PC,小型机,分布式服务器集群,各种不同的操作系统上.所以,对 ...